diff options
307 files changed, 16402 insertions, 7463 deletions
diff --git a/core/core_bind.cpp b/core/core_bind.cpp index 24b27d2692..26ecd41353 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -147,7 +147,7 @@ void ResourceLoader::_bind_methods() { ////// ResourceSaver ////// -Error ResourceSaver::save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags) { +Error ResourceSaver::save(const String &p_path, const Ref<Resource> &p_resource, BitField<SaverFlags> p_flags) { ERR_FAIL_COND_V_MSG(p_resource.is_null(), ERR_INVALID_PARAMETER, "Can't save empty resource to path '" + String(p_path) + "'."); return ::ResourceSaver::save(p_path, p_resource, p_flags); } @@ -179,14 +179,14 @@ void ResourceSaver::_bind_methods() { ClassDB::bind_method(D_METHOD("add_resource_format_saver", "format_saver", "at_front"), &ResourceSaver::add_resource_format_saver, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_resource_format_saver", "format_saver"), &ResourceSaver::remove_resource_format_saver); - BIND_ENUM_CONSTANT(FLAG_NONE); - BIND_ENUM_CONSTANT(FLAG_RELATIVE_PATHS); - BIND_ENUM_CONSTANT(FLAG_BUNDLE_RESOURCES); - BIND_ENUM_CONSTANT(FLAG_CHANGE_PATH); - BIND_ENUM_CONSTANT(FLAG_OMIT_EDITOR_PROPERTIES); - BIND_ENUM_CONSTANT(FLAG_SAVE_BIG_ENDIAN); - BIND_ENUM_CONSTANT(FLAG_COMPRESS); - BIND_ENUM_CONSTANT(FLAG_REPLACE_SUBRESOURCE_PATHS); + BIND_BITFIELD_FLAG(FLAG_NONE); + BIND_BITFIELD_FLAG(FLAG_RELATIVE_PATHS); + BIND_BITFIELD_FLAG(FLAG_BUNDLE_RESOURCES); + BIND_BITFIELD_FLAG(FLAG_CHANGE_PATH); + BIND_BITFIELD_FLAG(FLAG_OMIT_EDITOR_PROPERTIES); + BIND_BITFIELD_FLAG(FLAG_SAVE_BIG_ENDIAN); + BIND_BITFIELD_FLAG(FLAG_COMPRESS); + BIND_BITFIELD_FLAG(FLAG_REPLACE_SUBRESOURCE_PATHS); } ////// OS ////// diff --git a/core/core_bind.h b/core/core_bind.h index 99e14a75f5..c116ac4986 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -109,7 +109,7 @@ public: static ResourceSaver *get_singleton() { return singleton; } - Error save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags); + Error save(const String &p_path, const Ref<Resource> &p_resource, BitField<SaverFlags> p_flags); Vector<String> get_recognized_extensions(const Ref<Resource> &p_resource); void add_resource_format_saver(Ref<ResourceFormatSaver> p_format_saver, bool p_at_front); void remove_resource_format_saver(Ref<ResourceFormatSaver> p_format_saver); @@ -719,7 +719,7 @@ public: VARIANT_ENUM_CAST(core_bind::ResourceLoader::ThreadLoadStatus); VARIANT_ENUM_CAST(core_bind::ResourceLoader::CacheMode); -VARIANT_ENUM_CAST(core_bind::ResourceSaver::SaverFlags); +VARIANT_BITFIELD_CAST(core_bind::ResourceSaver::SaverFlags); VARIANT_ENUM_CAST(core_bind::OS::VideoDriver); VARIANT_ENUM_CAST(core_bind::OS::Weekday); diff --git a/core/doc_data.cpp b/core/doc_data.cpp index 1e72ad1090..89e7a8dc71 100644 --- a/core/doc_data.cpp +++ b/core/doc_data.cpp @@ -38,7 +38,7 @@ void DocData::return_doc_from_retinfo(DocData::MethodDoc &p_method, const Proper } else { p_method.return_type += "*"; } - } else if (p_retinfo.type == Variant::INT && p_retinfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + } else if (p_retinfo.type == Variant::INT && p_retinfo.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { p_method.return_enum = p_retinfo.class_name; if (p_method.return_enum.begins_with("_")) { //proxy class p_method.return_enum = p_method.return_enum.substr(1, p_method.return_enum.length()); @@ -69,7 +69,7 @@ void DocData::argument_doc_from_arginfo(DocData::ArgumentDoc &p_argument, const } else { p_argument.type += "*"; } - } else if (p_arginfo.type == Variant::INT && p_arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + } else if (p_arginfo.type == Variant::INT && p_arginfo.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { p_argument.enumeration = p_arginfo.class_name; if (p_argument.enumeration.begins_with("_")) { //proxy class p_argument.enumeration = p_argument.enumeration.substr(1, p_argument.enumeration.length()); diff --git a/core/doc_data.h b/core/doc_data.h index af20b717d7..1d8d2483e0 100644 --- a/core/doc_data.h +++ b/core/doc_data.h @@ -103,6 +103,7 @@ public: String value; bool is_value_valid = false; String enumeration; + bool is_bitfield = false; String description; bool operator<(const ConstantDoc &p_const) const { return name < p_const.name; @@ -111,6 +112,7 @@ public: struct EnumDoc { String name = "@unnamed_enum"; + bool is_bitfield = false; String description; Vector<DocData::ConstantDoc> values; }; @@ -163,6 +165,7 @@ public: Vector<ConstantDoc> constants; HashMap<String, String> enums; Vector<PropertyDoc> properties; + Vector<MethodDoc> annotations; Vector<ThemeItemDoc> theme_properties; bool is_script_doc = false; String script_path; diff --git a/core/extension/extension_api_dump.cpp b/core/extension/extension_api_dump.cpp index 9d846f87c2..d5c49b01e9 100644 --- a/core/extension/extension_api_dump.cpp +++ b/core/extension/extension_api_dump.cpp @@ -46,7 +46,7 @@ static String get_type_name(const PropertyInfo &p_info) { return p_info.hint_string + "*"; } } - if (p_info.type == Variant::INT && (p_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM)) { + if (p_info.type == Variant::INT && (p_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD))) { return String("enum::") + String(p_info.class_name); } if (p_info.class_name != StringName()) { @@ -665,6 +665,7 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() { for (const StringName &F : enum_list) { Dictionary d2; d2["name"] = String(F); + d2["is_bitfield"] = ClassDB::is_enum_bitfield(class_name, F); Array values; List<StringName> enum_constant_list; diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp index 32e025417e..3c104c2c86 100644 --- a/core/input/input_event.cpp +++ b/core/input/input_event.cpp @@ -741,6 +741,14 @@ float InputEventMouseMotion::get_pressure() const { return pressure; } +void InputEventMouseMotion::set_pen_inverted(bool p_inverted) { + pen_inverted = p_inverted; +} + +bool InputEventMouseMotion::get_pen_inverted() const { + return pen_inverted; +} + void InputEventMouseMotion::set_relative(const Vector2 &p_relative) { relative = p_relative; } @@ -768,6 +776,7 @@ Ref<InputEvent> InputEventMouseMotion::xformed_by(const Transform2D &p_xform, co mm->set_position(p_xform.xform(get_position() + p_local_ofs)); mm->set_pressure(get_pressure()); + mm->set_pen_inverted(get_pen_inverted()); mm->set_tilt(get_tilt()); mm->set_global_position(get_global_position()); @@ -805,9 +814,9 @@ String InputEventMouseMotion::to_string() { break; } - // Work around the fact vformat can only take 5 substitutions but 6 need to be passed. - String mask_and_position = vformat("button_mask=%s, position=(%s)", button_mask_string, String(get_position())); - return vformat("InputEventMouseMotion: %s, relative=(%s), velocity=(%s), pressure=%.2f, tilt=(%s)", mask_and_position, String(get_relative()), String(get_velocity()), get_pressure(), String(get_tilt())); + // Work around the fact vformat can only take 5 substitutions but 7 need to be passed. + String mask_and_position_and_relative = vformat("button_mask=%s, position=(%s), relative=(%s)", button_mask_string, String(get_position()), String(get_relative())); + return vformat("InputEventMouseMotion: %s, velocity=(%s), pressure=%.2f, tilt=(%s), pen_inverted=(%d)", mask_and_position_and_relative, String(get_velocity()), get_pressure(), String(get_tilt()), get_pen_inverted()); } bool InputEventMouseMotion::accumulate(const Ref<InputEvent> &p_event) { @@ -859,6 +868,9 @@ void InputEventMouseMotion::_bind_methods() { ClassDB::bind_method(D_METHOD("set_pressure", "pressure"), &InputEventMouseMotion::set_pressure); ClassDB::bind_method(D_METHOD("get_pressure"), &InputEventMouseMotion::get_pressure); + ClassDB::bind_method(D_METHOD("set_pen_inverted", "pen_inverted"), &InputEventMouseMotion::set_pen_inverted); + ClassDB::bind_method(D_METHOD("get_pen_inverted"), &InputEventMouseMotion::get_pen_inverted); + ClassDB::bind_method(D_METHOD("set_relative", "relative"), &InputEventMouseMotion::set_relative); ClassDB::bind_method(D_METHOD("get_relative"), &InputEventMouseMotion::get_relative); @@ -867,6 +879,7 @@ void InputEventMouseMotion::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "tilt"), "set_tilt", "get_tilt"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pressure"), "set_pressure", "get_pressure"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "pen_inverted"), "set_pen_inverted", "get_pen_inverted"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "relative", PROPERTY_HINT_NONE, "suffix:px"), "set_relative", "get_relative"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "velocity", PROPERTY_HINT_NONE, "suffix:px/s"), "set_velocity", "get_velocity"); } diff --git a/core/input/input_event.h b/core/input/input_event.h index 114db46623..59a2df497c 100644 --- a/core/input/input_event.h +++ b/core/input/input_event.h @@ -272,6 +272,7 @@ class InputEventMouseMotion : public InputEventMouse { float pressure = 0; Vector2 relative; Vector2 velocity; + bool pen_inverted = false; protected: static void _bind_methods(); @@ -283,6 +284,9 @@ public: void set_pressure(float p_pressure); float get_pressure() const; + void set_pen_inverted(bool p_inverted); + bool get_pen_inverted() const; + void set_relative(const Vector2 &p_relative); Vector2 get_relative() const; diff --git a/core/io/dir_access.cpp b/core/io/dir_access.cpp index 433a7efb21..0a900078b7 100644 --- a/core/io/dir_access.cpp +++ b/core/io/dir_access.cpp @@ -181,6 +181,10 @@ Error DirAccess::make_dir_recursive(String p_dir) { return OK; } +DirAccess::AccessType DirAccess::get_access_type() const { + return _access_type; +} + String DirAccess::fix_path(String p_path) const { switch (_access_type) { case ACCESS_RESOURCES: { diff --git a/core/io/dir_access.h b/core/io/dir_access.h index 0125f011b5..22017efaa3 100644 --- a/core/io/dir_access.h +++ b/core/io/dir_access.h @@ -57,6 +57,7 @@ protected: String _get_root_path() const; String _get_root_string() const; + AccessType get_access_type() const; String fix_path(String p_path) const; template <class T> diff --git a/core/io/xml_parser.cpp b/core/io/xml_parser.cpp index 7b43193f47..154b55f5e7 100644 --- a/core/io/xml_parser.cpp +++ b/core/io/xml_parser.cpp @@ -72,11 +72,11 @@ void XMLParser::_parse_closing_xml_element() { node_empty = false; attributes.clear(); - ++P; + next_char(); const char *pBeginClose = P; while (*P && *P != '>') { - ++P; + next_char(); } node_name = String::utf8(pBeginClose, (int)(P - pBeginClose)); @@ -85,7 +85,7 @@ void XMLParser::_parse_closing_xml_element() { #endif if (*P) { - ++P; + next_char(); } } @@ -95,12 +95,12 @@ void XMLParser::_ignore_definition() { char *F = P; // move until end marked with '>' reached while (*P && *P != '>') { - ++P; + next_char(); } node_name.parse_utf8(F, P - F); if (*P) { - ++P; + next_char(); } } @@ -114,7 +114,7 @@ bool XMLParser::_parse_cdata() { // skip '<![CDATA[' int count = 0; while (*P && count < 8) { - ++P; + next_char(); ++count; } @@ -134,7 +134,7 @@ bool XMLParser::_parse_cdata() { cDataEnd = P - 2; } - ++P; + next_char(); } if (cDataEnd) { @@ -180,7 +180,7 @@ void XMLParser::_parse_comment() { } else if (*P == '<') { ++count; } - ++P; + next_char(); } if (count) { @@ -206,7 +206,7 @@ void XMLParser::_parse_opening_xml_element() { // find end of element while (*P && *P != '>' && !_is_white_space(*P)) { - ++P; + next_char(); } const char *endName = P; @@ -214,7 +214,7 @@ void XMLParser::_parse_opening_xml_element() { // find attributes while (*P && *P != '>') { if (_is_white_space(*P)) { - ++P; + next_char(); } else { if (*P != '/') { // we've got an attribute @@ -223,7 +223,7 @@ void XMLParser::_parse_opening_xml_element() { const char *attributeNameBegin = P; while (*P && !_is_white_space(*P) && *P != '=') { - ++P; + next_char(); } if (!*P) { @@ -231,12 +231,12 @@ void XMLParser::_parse_opening_xml_element() { } const char *attributeNameEnd = P; - ++P; + next_char(); // read the attribute value // check for quotes and single quotes, thx to murphy while ((*P != '\"') && (*P != '\'') && *P) { - ++P; + next_char(); } if (!*P) { // malformatted xml file @@ -245,16 +245,16 @@ void XMLParser::_parse_opening_xml_element() { const char attributeQuoteChar = *P; - ++P; + next_char(); const char *attributeValueBegin = P; while (*P != attributeQuoteChar && *P) { - ++P; + next_char(); } const char *attributeValueEnd = P; if (*P) { - ++P; + next_char(); } Attribute attr; @@ -268,7 +268,7 @@ void XMLParser::_parse_opening_xml_element() { attributes.push_back(attr); } else { // tag is closed directly - ++P; + next_char(); node_empty = true; break; } @@ -288,7 +288,7 @@ void XMLParser::_parse_opening_xml_element() { #endif if (*P) { - ++P; + next_char(); } } @@ -298,7 +298,7 @@ void XMLParser::_parse_current_node() { // more forward until '<' found while (*P != '<' && *P) { - ++P; + next_char(); } if (P - start > 0) { @@ -312,7 +312,7 @@ void XMLParser::_parse_current_node() { return; } - ++P; + next_char(); // based on current token, parse and report next element switch (*P) { @@ -487,6 +487,7 @@ Error XMLParser::open(const String &p_path) { file->get_buffer((uint8_t *)data, length); data[length] = 0; P = data; + current_line = 0; return OK; } @@ -523,10 +524,7 @@ void XMLParser::close() { } int XMLParser::get_current_line() const { - return 0; -} - -XMLParser::XMLParser() { + return current_line; } XMLParser::~XMLParser() { diff --git a/core/io/xml_parser.h b/core/io/xml_parser.h index da14ee8eae..aea252ddc7 100644 --- a/core/io/xml_parser.h +++ b/core/io/xml_parser.h @@ -68,6 +68,7 @@ private: char *data = nullptr; char *P = nullptr; uint64_t length = 0; + uint64_t current_line = 0; String node_name; bool node_empty = false; NodeType node_type = NODE_NONE; @@ -88,6 +89,13 @@ private: void _parse_opening_xml_element(); void _parse_current_node(); + _FORCE_INLINE_ void next_char() { + if (*P == '\n') { + current_line++; + } + P++; + } + static void _bind_methods(); public: @@ -113,7 +121,6 @@ public: void close(); - XMLParser(); ~XMLParser(); }; diff --git a/core/math/expression.cpp b/core/math/expression.cpp index 419056d7d6..e230b69dc9 100644 --- a/core/math/expression.cpp +++ b/core/math/expression.cpp @@ -891,7 +891,7 @@ Expression::ENode *Expression::_parse_expression() { case TK_PERIOD: { //named indexing or function call _get_token(tk); - if (tk.type != TK_IDENTIFIER) { + if (tk.type != TK_IDENTIFIER && tk.type != TK_BUILTIN_FUNC) { _set_error("Expected identifier after '.'"); return nullptr; } diff --git a/core/math/octree.h b/core/math/octree.h deleted file mode 100644 index 8dd103f109..0000000000 --- a/core/math/octree.h +++ /dev/null @@ -1,1271 +0,0 @@ -/*************************************************************************/ -/* octree.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef OCTREE_H -#define OCTREE_H - -#include "core/math/aabb.h" -#include "core/math/geometry_3d.h" -#include "core/math/vector3.h" -#include "core/string/print_string.h" -#include "core/templates/list.h" -#include "core/templates/rb_map.h" -#include "core/variant/variant.h" - -typedef uint32_t OctreeElementID; - -#define OCTREE_ELEMENT_INVALID_ID 0 -#define OCTREE_SIZE_LIMIT 1e15 - -template <class T, bool use_pairs = false, class AL = DefaultAllocator> -class Octree { -public: - typedef void *(*PairCallback)(void *, OctreeElementID, T *, int, OctreeElementID, T *, int); - typedef void (*UnpairCallback)(void *, OctreeElementID, T *, int, OctreeElementID, T *, int, void *); - -private: - enum { - NEG = 0, - POS = 1, - }; - - enum { - OCTANT_NX_NY_NZ, - OCTANT_PX_NY_NZ, - OCTANT_NX_PY_NZ, - OCTANT_PX_PY_NZ, - OCTANT_NX_NY_PZ, - OCTANT_PX_NY_PZ, - OCTANT_NX_PY_PZ, - OCTANT_PX_PY_PZ - }; - - struct PairKey { - union { - struct { - OctreeElementID A; - OctreeElementID B; - }; - uint64_t key; - }; - - _FORCE_INLINE_ bool operator<(const PairKey &p_pair) const { - return key < p_pair.key; - } - - _FORCE_INLINE_ PairKey(OctreeElementID p_A, OctreeElementID p_B) { - if (p_A < p_B) { - A = p_A; - B = p_B; - } else { - B = p_A; - A = p_B; - } - } - - _FORCE_INLINE_ PairKey() {} - }; - - struct Element; - - struct Octant { - // cached for FAST plane check - AABB aabb; - - uint64_t last_pass = 0; - Octant *parent = nullptr; - Octant *children[8] = { nullptr }; - - int children_count = 0; // cache for amount of children (fast check for removal) - int parent_index = -1; // cache for parent index (fast check for removal) - - List<Element *, AL> pairable_elements; - List<Element *, AL> elements; - - Octant() {} - ~Octant() {} - }; - - struct PairData; - - struct Element { - Octree *octree = nullptr; - - T *userdata = nullptr; - int subindex = 0; - bool pairable = false; - uint32_t pairable_mask = 0; - uint32_t pairable_type = 0; - - uint64_t last_pass = 0; - OctreeElementID _id = 0; - Octant *common_parent = nullptr; - - AABB aabb; - AABB container_aabb; - - List<PairData *, AL> pair_list; - - struct OctantOwner { - Octant *octant = nullptr; - typename List<Element *, AL>::Element *E; - }; // an element can be in max 8 octants - - List<OctantOwner, AL> octant_owners; - - Element() {} - }; - - struct PairData { - int refcount; - bool intersect; - Element *A, *B; - void *ud = nullptr; - typename List<PairData *, AL>::Element *eA, *eB; - }; - - typedef HashMap<OctreeElementID, Element, Comparator<OctreeElementID>, AL> ElementMap; - typedef HashMap<PairKey, PairData, Comparator<PairKey>, AL> PairMap; - ElementMap element_map; - PairMap pair_map; - - PairCallback pair_callback = nullptr; - UnpairCallback unpair_callback = nullptr; - void *pair_callback_userdata = nullptr; - void *unpair_callback_userdata = nullptr; - - OctreeElementID last_element_id = 1; - uint64_t pass = 1; - - real_t unit_size = 1.0; - Octant *root = nullptr; - int octant_count = 0; - int pair_count = 0; - - _FORCE_INLINE_ void _pair_check(PairData *p_pair) { - bool intersect = p_pair->A->aabb.intersects_inclusive(p_pair->B->aabb); - - if (intersect != p_pair->intersect) { - if (intersect) { - if (pair_callback) { - p_pair->ud = pair_callback(pair_callback_userdata, p_pair->A->_id, p_pair->A->userdata, p_pair->A->subindex, p_pair->B->_id, p_pair->B->userdata, p_pair->B->subindex); - } - pair_count++; - } else { - if (unpair_callback) { - unpair_callback(pair_callback_userdata, p_pair->A->_id, p_pair->A->userdata, p_pair->A->subindex, p_pair->B->_id, p_pair->B->userdata, p_pair->B->subindex, p_pair->ud); - } - pair_count--; - } - - p_pair->intersect = intersect; - } - } - - _FORCE_INLINE_ void _pair_reference(Element *p_A, Element *p_B) { - if (p_A == p_B || (p_A->userdata == p_B->userdata && p_A->userdata)) { - return; - } - - if (!(p_A->pairable_type & p_B->pairable_mask) && - !(p_B->pairable_type & p_A->pairable_mask)) { - return; // none can pair with none - } - - PairKey key(p_A->_id, p_B->_id); - typename PairMap::Element *E = pair_map.find(key); - - if (!E) { - PairData pdata; - pdata.refcount = 1; - pdata.A = p_A; - pdata.B = p_B; - pdata.intersect = false; - E = pair_map.insert(key, pdata); - E->get().eA = p_A->pair_list.push_back(&E->get()); - E->get().eB = p_B->pair_list.push_back(&E->get()); - } else { - E->get().refcount++; - } - } - - _FORCE_INLINE_ void _pair_unreference(Element *p_A, Element *p_B) { - if (p_A == p_B) { - return; - } - - PairKey key(p_A->_id, p_B->_id); - typename PairMap::Element *E = pair_map.find(key); - if (!E) { - return; // no pair - } - - E->get().refcount--; - - if (E->get().refcount == 0) { - // bye pair - - if (E->get().intersect) { - if (unpair_callback) { - unpair_callback(pair_callback_userdata, p_A->_id, p_A->userdata, p_A->subindex, p_B->_id, p_B->userdata, p_B->subindex, E->get().ud); - } - - pair_count--; - } - - if (p_A == E->get().B) { - //may be reaching inverted - SWAP(p_A, p_B); - } - - p_A->pair_list.erase(E->get().eA); - p_B->pair_list.erase(E->get().eB); - pair_map.erase(E); - } - } - - _FORCE_INLINE_ void _element_check_pairs(Element *p_element) { - typename List<PairData *, AL>::Element *E = p_element->pair_list.front(); - while (E) { - _pair_check(E->get()); - E = E->next(); - } - } - - _FORCE_INLINE_ void _optimize() { - while (root && root->children_count < 2 && !root->elements.size() && !(use_pairs && root->pairable_elements.size())) { - Octant *new_root = nullptr; - if (root->children_count == 1) { - for (int i = 0; i < 8; i++) { - if (root->children[i]) { - new_root = root->children[i]; - root->children[i] = nullptr; - break; - } - } - ERR_FAIL_COND(!new_root); - new_root->parent = nullptr; - new_root->parent_index = -1; - } - - memdelete_allocator<Octant, AL>(root); - octant_count--; - root = new_root; - } - } - - void _insert_element(Element *p_element, Octant *p_octant); - void _ensure_valid_root(const AABB &p_aabb); - bool _remove_element_from_octant(Element *p_element, Octant *p_octant, Octant *p_limit = nullptr); - void _remove_element(Element *p_element); - void _pair_element(Element *p_element, Octant *p_octant); - void _unpair_element(Element *p_element, Octant *p_octant); - - struct _CullConvexData { - const Plane *planes; - int plane_count; - const Vector3 *points; - int point_count; - T **result_array; - int *result_idx = nullptr; - int result_max; - uint32_t mask; - }; - - void _cull_convex(Octant *p_octant, _CullConvexData *p_cull); - void _cull_aabb(Octant *p_octant, const AABB &p_aabb, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask); - void _cull_segment(Octant *p_octant, const Vector3 &p_from, const Vector3 &p_to, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask); - void _cull_point(Octant *p_octant, const Vector3 &p_point, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask); - - void _remove_tree(Octant *p_octant) { - if (!p_octant) { - return; - } - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i]) { - _remove_tree(p_octant->children[i]); - } - } - - memdelete_allocator<Octant, AL>(p_octant); - } - -public: - OctreeElementID create(T *p_userdata, const AABB &p_aabb = AABB(), int p_subindex = 0, bool p_pairable = false, uint32_t p_pairable_type = 0, uint32_t pairable_mask = 1); - void move(OctreeElementID p_id, const AABB &p_aabb); - void set_pairable(OctreeElementID p_id, bool p_pairable = false, uint32_t p_pairable_type = 0, uint32_t pairable_mask = 1); - void erase(OctreeElementID p_id); - - bool is_pairable(OctreeElementID p_id) const; - T *get(OctreeElementID p_id) const; - int get_subindex(OctreeElementID p_id) const; - - int cull_convex(const Vector<Plane> &p_convex, T **p_result_array, int p_result_max, uint32_t p_mask = 0xFFFFFFFF); - int cull_aabb(const AABB &p_aabb, T **p_result_array, int p_result_max, int *p_subindex_array = nullptr, uint32_t p_mask = 0xFFFFFFFF); - int cull_segment(const Vector3 &p_from, const Vector3 &p_to, T **p_result_array, int p_result_max, int *p_subindex_array = nullptr, uint32_t p_mask = 0xFFFFFFFF); - - int cull_point(const Vector3 &p_point, T **p_result_array, int p_result_max, int *p_subindex_array = nullptr, uint32_t p_mask = 0xFFFFFFFF); - - void set_pair_callback(PairCallback p_callback, void *p_userdata); - void set_unpair_callback(UnpairCallback p_callback, void *p_userdata); - - int get_octant_count() const { return octant_count; } - int get_pair_count() const { return pair_count; } - Octree(real_t p_unit_size = 1.0); - ~Octree() { _remove_tree(root); } -}; - -/* PRIVATE FUNCTIONS */ - -template <class T, bool use_pairs, class AL> -T *Octree<T, use_pairs, AL>::get(OctreeElementID p_id) const { - const typename ElementMap::Element *E = element_map.find(p_id); - ERR_FAIL_COND_V(!E, nullptr); - return E->get().userdata; -} - -template <class T, bool use_pairs, class AL> -bool Octree<T, use_pairs, AL>::is_pairable(OctreeElementID p_id) const { - const typename ElementMap::Element *E = element_map.find(p_id); - ERR_FAIL_COND_V(!E, false); - return E->get().pairable; -} - -template <class T, bool use_pairs, class AL> -int Octree<T, use_pairs, AL>::get_subindex(OctreeElementID p_id) const { - const typename ElementMap::Element *E = element_map.find(p_id); - ERR_FAIL_COND_V(!E, -1); - return E->get().subindex; -} - -#define OCTREE_DIVISOR 4 - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_insert_element(Element *p_element, Octant *p_octant) { - real_t element_size = p_element->aabb.get_longest_axis_size() * 1.01; // avoid precision issues - - if (p_octant->aabb.size.x / OCTREE_DIVISOR < element_size) { - //if (p_octant->aabb.size.x*0.5 < element_size) { - /* at smallest possible size for the element */ - typename Element::OctantOwner owner; - owner.octant = p_octant; - - if (use_pairs && p_element->pairable) { - p_octant->pairable_elements.push_back(p_element); - owner.E = p_octant->pairable_elements.back(); - } else { - p_octant->elements.push_back(p_element); - owner.E = p_octant->elements.back(); - } - - p_element->octant_owners.push_back(owner); - - if (p_element->common_parent == nullptr) { - p_element->common_parent = p_octant; - p_element->container_aabb = p_octant->aabb; - } else { - p_element->container_aabb.merge_with(p_octant->aabb); - } - - if (use_pairs && p_octant->children_count > 0) { - pass++; //elements below this only get ONE reference added - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i]) { - _pair_element(p_element, p_octant->children[i]); - } - } - } - } else { - /* not big enough, send it to subitems */ - int splits = 0; - bool candidate = p_element->common_parent == nullptr; - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i]) { - /* element exists, go straight to it */ - if (p_octant->children[i]->aabb.intersects_inclusive(p_element->aabb)) { - _insert_element(p_element, p_octant->children[i]); - splits++; - } - } else { - /* check against AABB where child should be */ - - AABB aabb = p_octant->aabb; - aabb.size *= 0.5; - - if (i & 1) { - aabb.position.x += aabb.size.x; - } - if (i & 2) { - aabb.position.y += aabb.size.y; - } - if (i & 4) { - aabb.position.z += aabb.size.z; - } - - if (aabb.intersects_inclusive(p_element->aabb)) { - /* if actually intersects, create the child */ - - Octant *child = memnew_allocator(Octant, AL); - p_octant->children[i] = child; - child->parent = p_octant; - child->parent_index = i; - - child->aabb = aabb; - - p_octant->children_count++; - - _insert_element(p_element, child); - octant_count++; - splits++; - } - } - } - - if (candidate && splits > 1) { - p_element->common_parent = p_octant; - } - } - - if (use_pairs) { - typename List<Element *, AL>::Element *E = p_octant->pairable_elements.front(); - - while (E) { - _pair_reference(p_element, E->get()); - E = E->next(); - } - - if (p_element->pairable) { - // and always test non-pairable if element is pairable - E = p_octant->elements.front(); - while (E) { - _pair_reference(p_element, E->get()); - E = E->next(); - } - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_ensure_valid_root(const AABB &p_aabb) { - if (!root) { - // octre is empty - - AABB base(Vector3(), Vector3(1.0, 1.0, 1.0) * unit_size); - - while (!base.encloses(p_aabb)) { - if (ABS(base.position.x + base.size.x) <= ABS(base.position.x)) { - /* grow towards positive */ - base.size *= 2.0; - } else { - base.position -= base.size; - base.size *= 2.0; - } - } - - root = memnew_allocator(Octant, AL); - - root->parent = nullptr; - root->parent_index = -1; - root->aabb = base; - - octant_count++; - - } else { - AABB base = root->aabb; - - while (!base.encloses(p_aabb)) { - ERR_FAIL_COND_MSG(base.size.x > OCTREE_SIZE_LIMIT, "Octree upper size limit reached, does the AABB supplied contain NAN?"); - - Octant *gp = memnew_allocator(Octant, AL); - octant_count++; - root->parent = gp; - - if (ABS(base.position.x + base.size.x) <= ABS(base.position.x)) { - /* grow towards positive */ - base.size *= 2.0; - gp->aabb = base; - gp->children[0] = root; - root->parent_index = 0; - } else { - base.position -= base.size; - base.size *= 2.0; - gp->aabb = base; - gp->children[(1 << 0) | (1 << 1) | (1 << 2)] = root; // add at all-positive - root->parent_index = (1 << 0) | (1 << 1) | (1 << 2); - } - - gp->children_count = 1; - root = gp; - } - } -} - -template <class T, bool use_pairs, class AL> -bool Octree<T, use_pairs, AL>::_remove_element_from_octant(Element *p_element, Octant *p_octant, Octant *p_limit) { - bool octant_removed = false; - - while (true) { - // check all exit conditions - - if (p_octant == p_limit) { // reached limit, nothing to erase, exit - return octant_removed; - } - - bool unpaired = false; - - if (use_pairs && p_octant->last_pass != pass) { - // check whether we should unpair stuff - // always test pairable - typename List<Element *, AL>::Element *E = p_octant->pairable_elements.front(); - while (E) { - _pair_unreference(p_element, E->get()); - E = E->next(); - } - if (p_element->pairable) { - // and always test non-pairable if element is pairable - E = p_octant->elements.front(); - while (E) { - _pair_unreference(p_element, E->get()); - E = E->next(); - } - } - p_octant->last_pass = pass; - unpaired = true; - } - - bool removed = false; - - Octant *parent = p_octant->parent; - - if (p_octant->children_count == 0 && p_octant->elements.is_empty() && p_octant->pairable_elements.is_empty()) { - // erase octant - - if (p_octant == root) { // won't have a parent, just erase - - root = nullptr; - } else { - ERR_FAIL_INDEX_V(p_octant->parent_index, 8, octant_removed); - - parent->children[p_octant->parent_index] = nullptr; - parent->children_count--; - } - - memdelete_allocator<Octant, AL>(p_octant); - octant_count--; - removed = true; - octant_removed = true; - } - - if (!removed && !unpaired) { - return octant_removed; // no reason to keep going up anymore! was already visited and was not removed - } - - p_octant = parent; - } - - return octant_removed; -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_unpair_element(Element *p_element, Octant *p_octant) { - // always test pairable - typename List<Element *, AL>::Element *E = p_octant->pairable_elements.front(); - while (E) { - if (E->get()->last_pass != pass) { // only remove ONE reference - _pair_unreference(p_element, E->get()); - E->get()->last_pass = pass; - } - E = E->next(); - } - - if (p_element->pairable) { - // and always test non-pairable if element is pairable - E = p_octant->elements.front(); - while (E) { - if (E->get()->last_pass != pass) { // only remove ONE reference - _pair_unreference(p_element, E->get()); - E->get()->last_pass = pass; - } - E = E->next(); - } - } - - p_octant->last_pass = pass; - - if (p_octant->children_count == 0) { - return; // small optimization for leafs - } - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i]) { - _unpair_element(p_element, p_octant->children[i]); - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_pair_element(Element *p_element, Octant *p_octant) { - // always test pairable - - typename List<Element *, AL>::Element *E = p_octant->pairable_elements.front(); - - while (E) { - if (E->get()->last_pass != pass) { // only get ONE reference - _pair_reference(p_element, E->get()); - E->get()->last_pass = pass; - } - E = E->next(); - } - - if (p_element->pairable) { - // and always test non-pairable if element is pairable - E = p_octant->elements.front(); - while (E) { - if (E->get()->last_pass != pass) { // only get ONE reference - _pair_reference(p_element, E->get()); - E->get()->last_pass = pass; - } - E = E->next(); - } - } - p_octant->last_pass = pass; - - if (p_octant->children_count == 0) { - return; // small optimization for leafs - } - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i]) { - _pair_element(p_element, p_octant->children[i]); - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_remove_element(Element *p_element) { - pass++; // will do a new pass for this - - typename List<typename Element::OctantOwner, AL>::Element *I = p_element->octant_owners.front(); - - /* FIRST remove going up normally */ - for (; I; I = I->next()) { - Octant *o = I->get().octant; - - if (!use_pairs) { // small speedup - o->elements.erase(I->get().E); - } - - _remove_element_from_octant(p_element, o); - } - - /* THEN remove going down */ - - I = p_element->octant_owners.front(); - - if (use_pairs) { - for (; I; I = I->next()) { - Octant *o = I->get().octant; - - // erase children pairs, they are erased ONCE even if repeated - pass++; - for (int i = 0; i < 8; i++) { - if (o->children[i]) { - _unpair_element(p_element, o->children[i]); - } - } - - if (p_element->pairable) { - o->pairable_elements.erase(I->get().E); - } else { - o->elements.erase(I->get().E); - } - } - } - - p_element->octant_owners.clear(); - - if (use_pairs) { - int remaining = p_element->pair_list.size(); - //p_element->pair_list.clear(); - ERR_FAIL_COND(remaining); - } -} - -template <class T, bool use_pairs, class AL> -OctreeElementID Octree<T, use_pairs, AL>::create(T *p_userdata, const AABB &p_aabb, int p_subindex, bool p_pairable, uint32_t p_pairable_type, uint32_t p_pairable_mask) { -// check for AABB validity -#ifdef DEBUG_ENABLED - ERR_FAIL_COND_V(p_aabb.position.x > 1e15 || p_aabb.position.x < -1e15, 0); - ERR_FAIL_COND_V(p_aabb.position.y > 1e15 || p_aabb.position.y < -1e15, 0); - ERR_FAIL_COND_V(p_aabb.position.z > 1e15 || p_aabb.position.z < -1e15, 0); - ERR_FAIL_COND_V(p_aabb.size.x > 1e15 || p_aabb.size.x < 0.0, 0); - ERR_FAIL_COND_V(p_aabb.size.y > 1e15 || p_aabb.size.y < 0.0, 0); - ERR_FAIL_COND_V(p_aabb.size.z > 1e15 || p_aabb.size.z < 0.0, 0); - ERR_FAIL_COND_V(Math::is_nan(p_aabb.size.x), 0); - ERR_FAIL_COND_V(Math::is_nan(p_aabb.size.y), 0); - ERR_FAIL_COND_V(Math::is_nan(p_aabb.size.z), 0); - -#endif - typename ElementMap::Element *E = element_map.insert(last_element_id++, - Element()); - Element &e = E->get(); - - e.aabb = p_aabb; - e.userdata = p_userdata; - e.subindex = p_subindex; - e.last_pass = 0; - e.octree = this; - e.pairable = p_pairable; - e.pairable_type = p_pairable_type; - e.pairable_mask = p_pairable_mask; - e._id = last_element_id - 1; - - if (!e.aabb.has_no_surface()) { - _ensure_valid_root(p_aabb); - _insert_element(&e, root); - if (use_pairs) { - _element_check_pairs(&e); - } - } - - return last_element_id - 1; -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::move(OctreeElementID p_id, const AABB &p_aabb) { -#ifdef DEBUG_ENABLED - // check for AABB validity - ERR_FAIL_COND(p_aabb.position.x > 1e15 || p_aabb.position.x < -1e15); - ERR_FAIL_COND(p_aabb.position.y > 1e15 || p_aabb.position.y < -1e15); - ERR_FAIL_COND(p_aabb.position.z > 1e15 || p_aabb.position.z < -1e15); - ERR_FAIL_COND(p_aabb.size.x > 1e15 || p_aabb.size.x < 0.0); - ERR_FAIL_COND(p_aabb.size.y > 1e15 || p_aabb.size.y < 0.0); - ERR_FAIL_COND(p_aabb.size.z > 1e15 || p_aabb.size.z < 0.0); - ERR_FAIL_COND(Math::is_nan(p_aabb.size.x)); - ERR_FAIL_COND(Math::is_nan(p_aabb.size.y)); - ERR_FAIL_COND(Math::is_nan(p_aabb.size.z)); -#endif - typename ElementMap::Element *E = element_map.find(p_id); - ERR_FAIL_COND(!E); - Element &e = E->get(); - - bool old_has_surf = !e.aabb.has_no_surface(); - bool new_has_surf = !p_aabb.has_no_surface(); - - if (old_has_surf != new_has_surf) { - if (old_has_surf) { - _remove_element(&e); // removing - e.common_parent = nullptr; - e.aabb = AABB(); - _optimize(); - } else { - _ensure_valid_root(p_aabb); // inserting - e.common_parent = nullptr; - e.aabb = p_aabb; - _insert_element(&e, root); - if (use_pairs) { - _element_check_pairs(&e); - } - } - - return; - } - - if (!old_has_surf) { // doing nothing - return; - } - - // it still is enclosed in the same AABB it was assigned to - if (e.container_aabb.encloses(p_aabb)) { - e.aabb = p_aabb; - if (use_pairs) { - _element_check_pairs(&e); // must check pairs anyway - } - - return; - } - - AABB combined = e.aabb; - combined.merge_with(p_aabb); - _ensure_valid_root(combined); - - ERR_FAIL_COND(e.octant_owners.front() == nullptr); - - /* FIND COMMON PARENT */ - - List<typename Element::OctantOwner, AL> owners = e.octant_owners; // save the octant owners - Octant *common_parent = e.common_parent; - ERR_FAIL_COND(!common_parent); - - //src is now the place towards where insertion is going to happen - pass++; - - while (common_parent && !common_parent->aabb.encloses(p_aabb)) { - common_parent = common_parent->parent; - } - - ERR_FAIL_COND(!common_parent); - - //prepare for reinsert - e.octant_owners.clear(); - e.common_parent = nullptr; - e.aabb = p_aabb; - - _insert_element(&e, common_parent); // reinsert from this point - - pass++; - - for (typename List<typename Element::OctantOwner, AL>::Element *F = owners.front(); F;) { - Octant *o = F->get().octant; - typename List<typename Element::OctantOwner, AL>::Element *N = F->next(); - - if (use_pairs && e.pairable) { - o->pairable_elements.erase(F->get().E); - } else { - o->elements.erase(F->get().E); - } - - if (_remove_element_from_octant(&e, o, common_parent->parent)) { - owners.erase(F); - } - - F = N; - } - - if (use_pairs) { - //unpair child elements in anything that survived - for (typename List<typename Element::OctantOwner, AL>::Element *F = owners.front(); F; F = F->next()) { - Octant *o = F->get().octant; - - // erase children pairs, unref ONCE - pass++; - for (int i = 0; i < 8; i++) { - if (o->children[i]) { - _unpair_element(&e, o->children[i]); - } - } - } - - _element_check_pairs(&e); - } - - _optimize(); -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::set_pairable(OctreeElementID p_id, bool p_pairable, uint32_t p_pairable_type, uint32_t p_pairable_mask) { - typename ElementMap::Element *E = element_map.find(p_id); - ERR_FAIL_COND(!E); - - Element &e = E->get(); - - if (p_pairable == e.pairable && e.pairable_type == p_pairable_type && e.pairable_mask == p_pairable_mask) { - return; // no changes, return - } - - if (!e.aabb.has_no_surface()) { - _remove_element(&e); - } - - e.pairable = p_pairable; - e.pairable_type = p_pairable_type; - e.pairable_mask = p_pairable_mask; - e.common_parent = nullptr; - - if (!e.aabb.has_no_surface()) { - _ensure_valid_root(e.aabb); - _insert_element(&e, root); - if (use_pairs) { - _element_check_pairs(&e); - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::erase(OctreeElementID p_id) { - typename ElementMap::Element *E = element_map.find(p_id); - ERR_FAIL_COND(!E); - - Element &e = E->get(); - - if (!e.aabb.has_no_surface()) { - _remove_element(&e); - } - - element_map.erase(p_id); - _optimize(); -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_cull_convex(Octant *p_octant, _CullConvexData *p_cull) { - if (*p_cull->result_idx == p_cull->result_max) { - return; //pointless - } - - if (!p_octant->elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->elements.front(); - - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_cull->mask))) { - continue; - } - e->last_pass = pass; - - if (e->aabb.intersects_convex_shape(p_cull->planes, p_cull->plane_count, p_cull->points, p_cull->point_count)) { - if (*p_cull->result_idx < p_cull->result_max) { - p_cull->result_array[*p_cull->result_idx] = e->userdata; - (*p_cull->result_idx)++; - } else { - return; // pointless to continue - } - } - } - } - - if (use_pairs && !p_octant->pairable_elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->pairable_elements.front(); - - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_cull->mask))) { - continue; - } - e->last_pass = pass; - - if (e->aabb.intersects_convex_shape(p_cull->planes, p_cull->plane_count, p_cull->points, p_cull->point_count)) { - if (*p_cull->result_idx < p_cull->result_max) { - p_cull->result_array[*p_cull->result_idx] = e->userdata; - (*p_cull->result_idx)++; - } else { - return; // pointless to continue - } - } - } - } - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i] && p_octant->children[i]->aabb.intersects_convex_shape(p_cull->planes, p_cull->plane_count, p_cull->points, p_cull->point_count)) { - _cull_convex(p_octant->children[i], p_cull); - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_cull_aabb(Octant *p_octant, const AABB &p_aabb, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask) { - if (*p_result_idx == p_result_max) { - return; //pointless - } - - if (!p_octant->elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->elements.front(); - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_mask))) { - continue; - } - e->last_pass = pass; - - if (p_aabb.intersects_inclusive(e->aabb)) { - if (*p_result_idx < p_result_max) { - p_result_array[*p_result_idx] = e->userdata; - if (p_subindex_array) { - p_subindex_array[*p_result_idx] = e->subindex; - } - - (*p_result_idx)++; - } else { - return; // pointless to continue - } - } - } - } - - if (use_pairs && !p_octant->pairable_elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->pairable_elements.front(); - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_mask))) { - continue; - } - e->last_pass = pass; - - if (p_aabb.intersects_inclusive(e->aabb)) { - if (*p_result_idx < p_result_max) { - p_result_array[*p_result_idx] = e->userdata; - if (p_subindex_array) { - p_subindex_array[*p_result_idx] = e->subindex; - } - (*p_result_idx)++; - } else { - return; // pointless to continue - } - } - } - } - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i] && p_octant->children[i]->aabb.intersects_inclusive(p_aabb)) { - _cull_aabb(p_octant->children[i], p_aabb, p_result_array, p_result_idx, p_result_max, p_subindex_array, p_mask); - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_cull_segment(Octant *p_octant, const Vector3 &p_from, const Vector3 &p_to, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask) { - if (*p_result_idx == p_result_max) { - return; //pointless - } - - if (!p_octant->elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->elements.front(); - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_mask))) { - continue; - } - e->last_pass = pass; - - if (e->aabb.intersects_segment(p_from, p_to)) { - if (*p_result_idx < p_result_max) { - p_result_array[*p_result_idx] = e->userdata; - if (p_subindex_array) { - p_subindex_array[*p_result_idx] = e->subindex; - } - (*p_result_idx)++; - - } else { - return; // pointless to continue - } - } - } - } - - if (use_pairs && !p_octant->pairable_elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->pairable_elements.front(); - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_mask))) { - continue; - } - - e->last_pass = pass; - - if (e->aabb.intersects_segment(p_from, p_to)) { - if (*p_result_idx < p_result_max) { - p_result_array[*p_result_idx] = e->userdata; - if (p_subindex_array) { - p_subindex_array[*p_result_idx] = e->subindex; - } - - (*p_result_idx)++; - - } else { - return; // pointless to continue - } - } - } - } - - for (int i = 0; i < 8; i++) { - if (p_octant->children[i] && p_octant->children[i]->aabb.intersects_segment(p_from, p_to)) { - _cull_segment(p_octant->children[i], p_from, p_to, p_result_array, p_result_idx, p_result_max, p_subindex_array, p_mask); - } - } -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::_cull_point(Octant *p_octant, const Vector3 &p_point, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask) { - if (*p_result_idx == p_result_max) { - return; //pointless - } - - if (!p_octant->elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->elements.front(); - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_mask))) { - continue; - } - e->last_pass = pass; - - if (e->aabb.has_point(p_point)) { - if (*p_result_idx < p_result_max) { - p_result_array[*p_result_idx] = e->userdata; - if (p_subindex_array) { - p_subindex_array[*p_result_idx] = e->subindex; - } - (*p_result_idx)++; - - } else { - return; // pointless to continue - } - } - } - } - - if (use_pairs && !p_octant->pairable_elements.is_empty()) { - typename List<Element *, AL>::Element *I; - I = p_octant->pairable_elements.front(); - for (; I; I = I->next()) { - Element *e = I->get(); - - if (e->last_pass == pass || (use_pairs && !(e->pairable_type & p_mask))) { - continue; - } - - e->last_pass = pass; - - if (e->aabb.has_point(p_point)) { - if (*p_result_idx < p_result_max) { - p_result_array[*p_result_idx] = e->userdata; - if (p_subindex_array) { - p_subindex_array[*p_result_idx] = e->subindex; - } - - (*p_result_idx)++; - - } else { - return; // pointless to continue - } - } - } - } - - for (int i = 0; i < 8; i++) { - //could be optimized.. - if (p_octant->children[i] && p_octant->children[i]->aabb.has_point(p_point)) { - _cull_point(p_octant->children[i], p_point, p_result_array, p_result_idx, p_result_max, p_subindex_array, p_mask); - } - } -} - -template <class T, bool use_pairs, class AL> -int Octree<T, use_pairs, AL>::cull_convex(const Vector<Plane> &p_convex, T **p_result_array, int p_result_max, uint32_t p_mask) { - if (!root || p_convex.size() == 0) { - return 0; - } - - Vector<Vector3> convex_points = Geometry3D::compute_convex_mesh_points(&p_convex[0], p_convex.size()); - if (convex_points.size() == 0) { - return 0; - } - - int result_count = 0; - pass++; - _CullConvexData cdata; - cdata.planes = &p_convex[0]; - cdata.plane_count = p_convex.size(); - cdata.points = &convex_points[0]; - cdata.point_count = convex_points.size(); - cdata.result_array = p_result_array; - cdata.result_max = p_result_max; - cdata.result_idx = &result_count; - cdata.mask = p_mask; - - _cull_convex(root, &cdata); - - return result_count; -} - -template <class T, bool use_pairs, class AL> -int Octree<T, use_pairs, AL>::cull_aabb(const AABB &p_aabb, T **p_result_array, int p_result_max, int *p_subindex_array, uint32_t p_mask) { - if (!root) { - return 0; - } - - int result_count = 0; - pass++; - _cull_aabb(root, p_aabb, p_result_array, &result_count, p_result_max, p_subindex_array, p_mask); - - return result_count; -} - -template <class T, bool use_pairs, class AL> -int Octree<T, use_pairs, AL>::cull_segment(const Vector3 &p_from, const Vector3 &p_to, T **p_result_array, int p_result_max, int *p_subindex_array, uint32_t p_mask) { - if (!root) { - return 0; - } - - int result_count = 0; - pass++; - _cull_segment(root, p_from, p_to, p_result_array, &result_count, p_result_max, p_subindex_array, p_mask); - - return result_count; -} - -template <class T, bool use_pairs, class AL> -int Octree<T, use_pairs, AL>::cull_point(const Vector3 &p_point, T **p_result_array, int p_result_max, int *p_subindex_array, uint32_t p_mask) { - if (!root) { - return 0; - } - - int result_count = 0; - pass++; - _cull_point(root, p_point, p_result_array, &result_count, p_result_max, p_subindex_array, p_mask); - - return result_count; -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::set_pair_callback(PairCallback p_callback, void *p_userdata) { - pair_callback = p_callback; - pair_callback_userdata = p_userdata; -} - -template <class T, bool use_pairs, class AL> -void Octree<T, use_pairs, AL>::set_unpair_callback(UnpairCallback p_callback, void *p_userdata) { - unpair_callback = p_callback; - unpair_callback_userdata = p_userdata; -} - -template <class T, bool use_pairs, class AL> -Octree<T, use_pairs, AL>::Octree(real_t p_unit_size) { - unit_size = p_unit_size; -} - -#endif // OCTREE_H diff --git a/core/object/class_db.cpp b/core/object/class_db.cpp index 3c9f373d12..ac008dad88 100644 --- a/core/object/class_db.cpp +++ b/core/object/class_db.cpp @@ -536,7 +536,7 @@ MethodBind *ClassDB::get_method(const StringName &p_class, const StringName &p_n return nullptr; } -void ClassDB::bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant) { +void ClassDB::bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant, bool p_is_bitfield) { OBJTYPE_WLOCK; ClassInfo *type = classes.getptr(p_class); @@ -555,13 +555,15 @@ void ClassDB::bind_integer_constant(const StringName &p_class, const StringName enum_name = enum_name.get_slicec('.', 1); } - List<StringName> *constants_list = type->enum_map.getptr(enum_name); + ClassInfo::EnumInfo *constants_list = type->enum_map.getptr(enum_name); if (constants_list) { - constants_list->push_back(p_name); + constants_list->constants.push_back(p_name); + constants_list->is_bitfield = p_is_bitfield; } else { - List<StringName> new_list; - new_list.push_back(p_name); + ClassInfo::EnumInfo new_list; + new_list.is_bitfield = p_is_bitfield; + new_list.constants.push_back(p_name); type->enum_map[enum_name] = new_list; } } @@ -645,8 +647,8 @@ StringName ClassDB::get_integer_constant_enum(const StringName &p_class, const S ClassInfo *type = classes.getptr(p_class); while (type) { - for (KeyValue<StringName, List<StringName>> &E : type->enum_map) { - List<StringName> &constants_list = E.value; + for (KeyValue<StringName, ClassInfo::EnumInfo> &E : type->enum_map) { + List<StringName> &constants_list = E.value.constants; const List<StringName>::Element *found = constants_list.find(p_name); if (found) { return E.key; @@ -669,7 +671,7 @@ void ClassDB::get_enum_list(const StringName &p_class, List<StringName> *p_enums ClassInfo *type = classes.getptr(p_class); while (type) { - for (KeyValue<StringName, List<StringName>> &E : type->enum_map) { + for (KeyValue<StringName, ClassInfo::EnumInfo> &E : type->enum_map) { p_enums->push_back(E.key); } @@ -687,10 +689,10 @@ void ClassDB::get_enum_constants(const StringName &p_class, const StringName &p_ ClassInfo *type = classes.getptr(p_class); while (type) { - const List<StringName> *constants = type->enum_map.getptr(p_enum); + const ClassInfo::EnumInfo *constants = type->enum_map.getptr(p_enum); if (constants) { - for (const List<StringName>::Element *E = constants->front(); E; E = E->next()) { + for (const List<StringName>::Element *E = constants->constants.front(); E; E = E->next()) { p_constants->push_back(E->get()); } } @@ -748,6 +750,25 @@ bool ClassDB::has_enum(const StringName &p_class, const StringName &p_name, bool return false; } +bool ClassDB::is_enum_bitfield(const StringName &p_class, const StringName &p_name, bool p_no_inheritance) { + OBJTYPE_RLOCK; + + ClassInfo *type = classes.getptr(p_class); + + while (type) { + if (type->enum_map.has(p_name) && type->enum_map[p_name].is_bitfield) { + return true; + } + if (p_no_inheritance) { + return false; + } + + type = type->inherits_ptr; + } + + return false; +} + void ClassDB::add_signal(const StringName &p_class, const MethodInfo &p_signal) { OBJTYPE_WLOCK; diff --git a/core/object/class_db.h b/core/object/class_db.h index f2f73dc674..1d26eb18f1 100644 --- a/core/object/class_db.h +++ b/core/object/class_db.h @@ -104,7 +104,12 @@ public: HashMap<StringName, MethodBind *> method_map; HashMap<StringName, int64_t> constant_map; - HashMap<StringName, List<StringName>> enum_map; + struct EnumInfo { + List<StringName> constants; + bool is_bitfield = false; + }; + + HashMap<StringName, EnumInfo> enum_map; HashMap<StringName, MethodInfo> signal_map; List<PropertyInfo> property_list; HashMap<StringName, PropertyInfo> property_map; @@ -325,15 +330,17 @@ public: static void add_virtual_method(const StringName &p_class, const MethodInfo &p_method, bool p_virtual = true, const Vector<String> &p_arg_names = Vector<String>(), bool p_object_core = false); static void get_virtual_methods(const StringName &p_class, List<MethodInfo> *p_methods, bool p_no_inheritance = false); - static void bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant); + static void bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant, bool p_is_bitfield = false); static void get_integer_constant_list(const StringName &p_class, List<String> *p_constants, bool p_no_inheritance = false); static int64_t get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success = nullptr); static bool has_integer_constant(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); static StringName get_integer_constant_enum(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); + static StringName get_integer_constant_bitfield(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); static void get_enum_list(const StringName &p_class, List<StringName> *p_enums, bool p_no_inheritance = false); static void get_enum_constants(const StringName &p_class, const StringName &p_enum, List<StringName> *p_constants, bool p_no_inheritance = false); static bool has_enum(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); + static bool is_enum_bitfield(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); static void set_method_error_return_values(const StringName &p_class, const StringName &p_method, const Vector<Error> &p_values); static Vector<Error> get_method_error_return_values(const StringName &p_class, const StringName &p_method); @@ -370,6 +377,9 @@ public: #define BIND_ENUM_CONSTANT(m_constant) \ ::ClassDB::bind_integer_constant(get_class_static(), __constant_get_enum_name(m_constant, #m_constant), #m_constant, m_constant); +#define BIND_BITFIELD_FLAG(m_constant) \ + ::ClassDB::bind_integer_constant(get_class_static(), __constant_get_bitfield_name(m_constant, #m_constant), #m_constant, m_constant, true); + _FORCE_INLINE_ void errarray_add_str(Vector<Error> &arr) { } @@ -401,6 +411,9 @@ _FORCE_INLINE_ Vector<Error> errarray(P... p_args) { #define BIND_ENUM_CONSTANT(m_constant) \ ::ClassDB::bind_integer_constant(get_class_static(), StringName(), #m_constant, m_constant); +#define BIND_BITFIELD_FLAG(m_constant) \ + ::ClassDB::bind_integer_constant(get_class_static(), StringName(), #m_constant, m_constant, true); + #define BIND_METHOD_ERR_RETURN_DOC(m_method, ...) #endif diff --git a/core/object/object.h b/core/object/object.h index 1f6386e6b4..87d042dd7e 100644 --- a/core/object/object.h +++ b/core/object/object.h @@ -109,6 +109,7 @@ enum PropertyUsageFlags { PROPERTY_USAGE_GROUP = 128, //used for grouping props in the editor PROPERTY_USAGE_CATEGORY = 256, PROPERTY_USAGE_SUBGROUP = 512, + PROPERTY_USAGE_CLASS_IS_BITFIELD = 1024, PROPERTY_USAGE_NO_INSTANCE_STATE = 2048, PROPERTY_USAGE_RESTART_IF_CHANGED = 4096, PROPERTY_USAGE_SCRIPT_VARIABLE = 8192, diff --git a/core/object/script_language.h b/core/object/script_language.h index 776a9bfaab..686ab5b8d3 100644 --- a/core/object/script_language.h +++ b/core/object/script_language.h @@ -350,6 +350,7 @@ public: LOOKUP_RESULT_CLASS_SIGNAL, LOOKUP_RESULT_CLASS_ENUM, LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE, + LOOKUP_RESULT_CLASS_ANNOTATION, LOOKUP_RESULT_MAX }; @@ -402,6 +403,7 @@ public: virtual void get_recognized_extensions(List<String> *p_extensions) const = 0; virtual void get_public_functions(List<MethodInfo> *p_functions) const = 0; virtual void get_public_constants(List<Pair<String, Variant>> *p_constants) const = 0; + virtual void get_public_annotations(List<MethodInfo> *p_annotations) const = 0; struct ProfilingInfo { StringName signature; diff --git a/core/object/script_language_extension.cpp b/core/object/script_language_extension.cpp index 5af79bbea3..ab8dd6d1ee 100644 --- a/core/object/script_language_extension.cpp +++ b/core/object/script_language_extension.cpp @@ -134,6 +134,7 @@ void ScriptLanguageExtension::_bind_methods() { GDVIRTUAL_BIND(_get_recognized_extensions); GDVIRTUAL_BIND(_get_public_functions); GDVIRTUAL_BIND(_get_public_constants); + GDVIRTUAL_BIND(_get_public_annotations); GDVIRTUAL_BIND(_profiling_start); GDVIRTUAL_BIND(_profiling_stop); @@ -160,6 +161,7 @@ void ScriptLanguageExtension::_bind_methods() { BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_SIGNAL); BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_ENUM); BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE); + BIND_ENUM_CONSTANT(LOOKUP_RESULT_CLASS_ANNOTATION); BIND_ENUM_CONSTANT(LOOKUP_RESULT_MAX); BIND_ENUM_CONSTANT(LOCATION_LOCAL); diff --git a/core/object/script_language_extension.h b/core/object/script_language_extension.h index 7eea48370e..2c53139ec2 100644 --- a/core/object/script_language_extension.h +++ b/core/object/script_language_extension.h @@ -580,6 +580,15 @@ public: p_constants->push_back(Pair<String, Variant>(d["name"], d["value"])); } } + GDVIRTUAL0RC(TypedArray<Dictionary>, _get_public_annotations) + virtual void get_public_annotations(List<MethodInfo> *p_annotations) const override { + TypedArray<Dictionary> ret; + GDVIRTUAL_REQUIRED_CALL(_get_public_annotations, ret); + for (int i = 0; i < ret.size(); i++) { + MethodInfo mi = MethodInfo::from_dict(ret[i]); + p_annotations->push_back(mi); + } + } EXBIND0(profiling_start) EXBIND0(profiling_stop) diff --git a/core/variant/binder_common.h b/core/variant/binder_common.h index 22a13b0fab..84f894dcbf 100644 --- a/core/variant/binder_common.h +++ b/core/variant/binder_common.h @@ -106,6 +106,29 @@ struct VariantCaster<const T &> { static void initialize(m_enum &value) { value = (m_enum)0; } \ }; +#define VARIANT_BITFIELD_CAST(m_enum) \ + MAKE_BITFIELD_TYPE_INFO(m_enum) \ + template <> \ + struct VariantCaster<BitField<m_enum>> { \ + static _FORCE_INLINE_ BitField<m_enum> cast(const Variant &p_variant) { \ + return BitField<m_enum>(p_variant.operator int64_t()); \ + } \ + }; \ + template <> \ + struct PtrToArg<BitField<m_enum>> { \ + _FORCE_INLINE_ static BitField<m_enum> convert(const void *p_ptr) { \ + return BitField<m_enum>(*reinterpret_cast<const int64_t *>(p_ptr)); \ + } \ + typedef int64_t EncodeT; \ + _FORCE_INLINE_ static void encode(BitField<m_enum> p_val, const void *p_ptr) { \ + *(int64_t *)p_ptr = p_val; \ + } \ + }; \ + template <> \ + struct ZeroInitializer<BitField<m_enum>> { \ + static void initialize(BitField<m_enum> &value) { value = 0; } \ + }; + // Object enum casts must go here VARIANT_ENUM_CAST(Object::ConnectFlags); diff --git a/core/variant/type_info.h b/core/variant/type_info.h index bacd0d19ce..794274dd77 100644 --- a/core/variant/type_info.h +++ b/core/variant/type_info.h @@ -279,6 +279,51 @@ inline StringName __constant_get_enum_name(T param, const String &p_constant) { return GetTypeInfo<T>::get_class_info().class_name; } +template <class T> +class BitField { + uint32_t value = 0; + +public: + _FORCE_INLINE_ void set_flag(T p_flag) { value |= p_flag; } + _FORCE_INLINE_ bool has_flag(T p_flag) const { return value & p_flag; } + _FORCE_INLINE_ void clear_flag(T p_flag) { return value &= ~p_flag; } + _FORCE_INLINE_ BitField(uint32_t p_value) { value = p_value; } + _FORCE_INLINE_ operator uint32_t() const { return value; } +}; + +#define TEMPL_MAKE_BITFIELD_TYPE_INFO(m_enum, m_impl) \ + template <> \ + struct GetTypeInfo<m_impl> { \ + static const Variant::Type VARIANT_TYPE = Variant::INT; \ + static const GodotTypeInfo::Metadata METADATA = GodotTypeInfo::METADATA_NONE; \ + static inline PropertyInfo get_class_info() { \ + return PropertyInfo(Variant::INT, String(), PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_CLASS_IS_BITFIELD, \ + godot::details::enum_qualified_name_to_class_info_name(String(#m_enum))); \ + } \ + }; \ + template <> \ + struct GetTypeInfo<BitField<m_impl>> { \ + static const Variant::Type VARIANT_TYPE = Variant::INT; \ + static const GodotTypeInfo::Metadata METADATA = GodotTypeInfo::METADATA_NONE; \ + static inline PropertyInfo get_class_info() { \ + return PropertyInfo(Variant::INT, String(), PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_CLASS_IS_BITFIELD, \ + godot::details::enum_qualified_name_to_class_info_name(String(#m_enum))); \ + } \ + }; + +#define MAKE_BITFIELD_TYPE_INFO(m_enum) \ + TEMPL_MAKE_BITFIELD_TYPE_INFO(m_enum, m_enum) \ + TEMPL_MAKE_BITFIELD_TYPE_INFO(m_enum, m_enum const) \ + TEMPL_MAKE_BITFIELD_TYPE_INFO(m_enum, m_enum &) \ + TEMPL_MAKE_BITFIELD_TYPE_INFO(m_enum, const m_enum &) + +template <typename T> +inline StringName __constant_get_bitfield_name(T param, const String &p_constant) { + if (GetTypeInfo<T>::VARIANT_TYPE == Variant::NIL) { + ERR_PRINT("Missing VARIANT_ENUM_CAST for constant's bitfield: " + p_constant); + } + return GetTypeInfo<BitField<T>>::get_class_info().class_name; +} #define CLASS_INFO(m_type) (GetTypeInfo<m_type *>::get_class_info()) template <typename T> diff --git a/doc/class.xsd b/doc/class.xsd index 498c930d6f..70c0323464 100644 --- a/doc/class.xsd +++ b/doc/class.xsd @@ -155,6 +155,7 @@ <xs:attribute type="xs:string" name="name" /> <xs:attribute type="xs:string" name="value" /> <xs:attribute type="xs:string" name="enum" use="optional" /> + <xs:attribute type="xs:boolean" name="is_bitfield" use="optional" /> </xs:extension> </xs:simpleContent> </xs:complexType> @@ -162,6 +163,42 @@ </xs:sequence> </xs:complexType> </xs:element> + <xs:element name="annotations" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="annotation" maxOccurs="unbounded" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:element name="return" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:sequence /> + </xs:sequence> + <xs:attribute type="xs:string" name="type" /> + <xs:attribute type="xs:string" name="enum" use="optional" /> + </xs:complexType> + </xs:element> + <xs:element name="argument" maxOccurs="unbounded" minOccurs="0"> + <xs:complexType> + <xs:sequence> + <xs:sequence /> + </xs:sequence> + <xs:attribute type="xs:byte" name="index" /> + <xs:attribute type="xs:string" name="name" /> + <xs:attribute type="xs:string" name="type" /> + <xs:attribute type="xs:string" name="enum" use="optional" /> + <xs:attribute type="xs:string" name="default" use="optional" /> + </xs:complexType> + </xs:element> + <xs:element type="xs:string" name="description" /> + </xs:sequence> + <xs:attribute type="xs:string" name="name" use="optional" /> + <xs:attribute type="xs:string" name="qualifiers" use="optional" /> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> <xs:element name="theme_items" minOccurs="0"> <xs:complexType> <xs:sequence> diff --git a/doc/classes/Decal.xml b/doc/classes/Decal.xml index c38e1d1499..861b4b480c 100644 --- a/doc/classes/Decal.xml +++ b/doc/classes/Decal.xml @@ -89,15 +89,19 @@ </member> <member name="texture_albedo" type="Texture2D" setter="set_texture" getter="get_texture"> [Texture2D] with the base [Color] of the Decal. Either this or the [member texture_emission] must be set for the Decal to be visible. Use the alpha channel like a mask to smoothly blend the edges of the decal with the underlying object. + [b]Note:[/b] Unlike [BaseMaterial3D] whose filter mode can be adjusted on a per-material basis, the filter mode for [Decal] textures is set globally with [member ProjectSettings.rendering/textures/decals/filter]. </member> <member name="texture_emission" type="Texture2D" setter="set_texture" getter="get_texture"> [Texture2D] with the emission [Color] of the Decal. Either this or the [member texture_emission] must be set for the Decal to be visible. Use the alpha channel like a mask to smoothly blend the edges of the decal with the underlying object. + [b]Note:[/b] Unlike [BaseMaterial3D] whose filter mode can be adjusted on a per-material basis, the filter mode for [Decal] textures is set globally with [member ProjectSettings.rendering/textures/decals/filter]. </member> <member name="texture_normal" type="Texture2D" setter="set_texture" getter="get_texture"> [Texture2D] with the per-pixel normal map for the decal. Use this to add extra detail to decals. + [b]Note:[/b] Unlike [BaseMaterial3D] whose filter mode can be adjusted on a per-material basis, the filter mode for [Decal] textures is set globally with [member ProjectSettings.rendering/textures/decals/filter]. </member> <member name="texture_orm" type="Texture2D" setter="set_texture" getter="get_texture"> [Texture2D] storing ambient occlusion, roughness, and metallic for the decal. Use this to add extra detail to decals. + [b]Note:[/b] Unlike [BaseMaterial3D] whose filter mode can be adjusted on a per-material basis, the filter mode for [Decal] textures is set globally with [member ProjectSettings.rendering/textures/decals/filter]. </member> <member name="upper_fade" type="float" setter="set_upper_fade" getter="get_upper_fade" default="0.3"> Sets the curve over which the decal will fade as the surface gets further from the center of the [AABB]. Only positive values are valid (negative values will be clamped to [code]0.0[/code]). diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index ad74204d82..83aad587a5 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -12,6 +12,10 @@ <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> <members> + <member name="pen_inverted" type="bool" setter="set_pen_inverted" getter="get_pen_inverted" default="false"> + Returns [code]true[/code] when using the eraser end of a stylus pen. + [b]Note:[/b] This property is implemented on Linux, macOS and Windows. + </member> <member name="pressure" type="float" setter="set_pressure" getter="get_pressure" default="0.0"> Represents the pressure the user puts on the pen. Ranges from [code]0.0[/code] to [code]1.0[/code]. </member> diff --git a/doc/classes/Light3D.xml b/doc/classes/Light3D.xml index 4d8fd63257..0ebd83c882 100644 --- a/doc/classes/Light3D.xml +++ b/doc/classes/Light3D.xml @@ -73,6 +73,7 @@ </member> <member name="light_projector" type="Texture2D" setter="set_projector" getter="get_projector"> [Texture2D] projected by light. [member shadow_enabled] must be on for the projector to work. Light projectors make the light appear as if it is shining through a colored but transparent object, almost like light shining through stained-glass. + [b]Note:[/b] Unlike [BaseMaterial3D] whose filter mode can be adjusted on a per-material basis, the filter mode for light projector textures is set globally with [member ProjectSettings.rendering/textures/light_projectors/filter]. </member> <member name="light_size" type="float" setter="set_param" getter="get_param" default="0.0"> The size of the light in Godot units. Only available for [OmniLight3D]s and [SpotLight3D]s. Increasing this value will make the light fade out slower and shadows appear blurrier. This can be used to simulate area lights to an extent. diff --git a/doc/classes/ResourceSaver.xml b/doc/classes/ResourceSaver.xml index 815c7e8813..213d8c585a 100644 --- a/doc/classes/ResourceSaver.xml +++ b/doc/classes/ResourceSaver.xml @@ -37,7 +37,7 @@ <return type="int" enum="Error" /> <argument index="0" name="path" type="String" /> <argument index="1" name="resource" type="Resource" /> - <argument index="2" name="flags" type="int" default="0" /> + <argument index="2" name="flags" type="int" enum="ResourceSaver.SaverFlags" default="0" /> <description> Saves a resource to disk to the given path, using a [ResourceFormatSaver] that recognizes the resource object. The [code]flags[/code] bitmask can be specified to customize the save behavior using [enum SaverFlags] flags. @@ -46,28 +46,28 @@ </method> </methods> <constants> - <constant name="FLAG_NONE" value="0" enum="SaverFlags"> + <constant name="FLAG_NONE" value="0" enum="SaverFlags" is_bitfield="true"> No resource saving option. </constant> - <constant name="FLAG_RELATIVE_PATHS" value="1" enum="SaverFlags"> + <constant name="FLAG_RELATIVE_PATHS" value="1" enum="SaverFlags" is_bitfield="true"> Save the resource with a path relative to the scene which uses it. </constant> - <constant name="FLAG_BUNDLE_RESOURCES" value="2" enum="SaverFlags"> + <constant name="FLAG_BUNDLE_RESOURCES" value="2" enum="SaverFlags" is_bitfield="true"> Bundles external resources. </constant> - <constant name="FLAG_CHANGE_PATH" value="4" enum="SaverFlags"> + <constant name="FLAG_CHANGE_PATH" value="4" enum="SaverFlags" is_bitfield="true"> Changes the [member Resource.resource_path] of the saved resource to match its new location. </constant> - <constant name="FLAG_OMIT_EDITOR_PROPERTIES" value="8" enum="SaverFlags"> + <constant name="FLAG_OMIT_EDITOR_PROPERTIES" value="8" enum="SaverFlags" is_bitfield="true"> Do not save editor-specific metadata (identified by their [code]__editor[/code] prefix). </constant> - <constant name="FLAG_SAVE_BIG_ENDIAN" value="16" enum="SaverFlags"> + <constant name="FLAG_SAVE_BIG_ENDIAN" value="16" enum="SaverFlags" is_bitfield="true"> Save as big endian (see [member File.big_endian]). </constant> - <constant name="FLAG_COMPRESS" value="32" enum="SaverFlags"> + <constant name="FLAG_COMPRESS" value="32" enum="SaverFlags" is_bitfield="true"> Compress the resource on save using [constant File.COMPRESSION_ZSTD]. Only available for binary resource types. </constant> - <constant name="FLAG_REPLACE_SUBRESOURCE_PATHS" value="64" enum="SaverFlags"> + <constant name="FLAG_REPLACE_SUBRESOURCE_PATHS" value="64" enum="SaverFlags" is_bitfield="true"> Take over the paths of the saved subresources (see [method Resource.take_over_path]). </constant> </constants> diff --git a/doc/classes/ScriptLanguageExtension.xml b/doc/classes/ScriptLanguageExtension.xml index 0f757cf806..45d4cf44fa 100644 --- a/doc/classes/ScriptLanguageExtension.xml +++ b/doc/classes/ScriptLanguageExtension.xml @@ -174,6 +174,11 @@ <description> </description> </method> + <method name="_get_public_annotations" qualifiers="virtual const"> + <return type="Dictionary[]" /> + <description> + </description> + </method> <method name="_get_public_constants" qualifiers="virtual const"> <return type="Dictionary" /> <description> @@ -378,7 +383,9 @@ </constant> <constant name="LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE" value="7" enum="LookupResultType"> </constant> - <constant name="LOOKUP_RESULT_MAX" value="8" enum="LookupResultType"> + <constant name="LOOKUP_RESULT_CLASS_ANNOTATION" value="8" enum="LookupResultType"> + </constant> + <constant name="LOOKUP_RESULT_MAX" value="9" enum="LookupResultType"> </constant> <constant name="LOCATION_LOCAL" value="0" enum="CodeCompletionLocation"> The option is local to the location of the code completion query - e.g. a local variable. diff --git a/doc/classes/StyleBox.xml b/doc/classes/StyleBox.xml index 74d02a84fd..d863e3c652 100644 --- a/doc/classes/StyleBox.xml +++ b/doc/classes/StyleBox.xml @@ -46,8 +46,8 @@ <argument index="0" name="canvas_item" type="RID" /> <argument index="1" name="rect" type="Rect2" /> <description> - Draws this stylebox using a [CanvasItem] with given [RID]. - You can get a [RID] value using [method Object.get_instance_id] on a [CanvasItem]-derived node. + Draws this stylebox using a canvas item identified by the given [RID]. + The [RID] value can either be the result of [method CanvasItem.get_canvas_item] called on an existing [CanvasItem]-derived node, or directly from creating a canvas item in the [RenderingServer] with [method RenderingServer.canvas_item_create]. </description> </method> <method name="get_center_size" qualifiers="const"> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index 2de185903d..62a1be030d 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -998,13 +998,16 @@ <member name="placeholder_text" type="String" setter="set_placeholder" getter="get_placeholder" default=""""> Text shown when the [TextEdit] is empty. It is [b]not[/b] the [TextEdit]'s default value (see [member text]). </member> + <member name="scroll_fit_content_height" type="bool" setter="set_fit_content_height_enabled" getter="is_fit_content_height_enabled" default="false"> + If [code]true[/code], [TextEdit] will disable vertical scroll and fit minimum height to the number of visible lines. + </member> <member name="scroll_horizontal" type="int" setter="set_h_scroll" getter="get_h_scroll" default="0"> If there is a horizontal scrollbar, this determines the current horizontal scroll value in pixels. </member> <member name="scroll_past_end_of_file" type="bool" setter="set_scroll_past_end_of_file_enabled" getter="is_scroll_past_end_of_file_enabled" default="false"> Allow scrolling past the last line into "virtual" space. </member> - <member name="scroll_smooth" type="bool" setter="set_smooth_scroll_enable" getter="is_smooth_scroll_enabled" default="false"> + <member name="scroll_smooth" type="bool" setter="set_smooth_scroll_enabled" getter="is_smooth_scroll_enabled" default="false"> Scroll smoothly over the text rather then jumping to the next location. </member> <member name="scroll_v_scroll_speed" type="float" setter="set_v_scroll_speed" getter="get_v_scroll_speed" default="80.0"> diff --git a/doc/classes/VideoStreamPlayer.xml b/doc/classes/VideoStreamPlayer.xml index 092a754a39..f6594ff9e7 100644 --- a/doc/classes/VideoStreamPlayer.xml +++ b/doc/classes/VideoStreamPlayer.xml @@ -58,7 +58,7 @@ <member name="bus" type="StringName" setter="set_bus" getter="get_bus" default="&"Master""> Audio bus to use for sound playback. </member> - <member name="expand" type="bool" setter="set_expand" getter="has_expand" default="true"> + <member name="expand" type="bool" setter="set_expand" getter="has_expand" default="false"> If [code]true[/code], the video scales to the control size. Otherwise, the control minimum size will be automatically adjusted to match the video stream's dimensions. </member> <member name="paused" type="bool" setter="set_paused" getter="is_paused" default="false"> diff --git a/doc/classes/VoxelGI.xml b/doc/classes/VoxelGI.xml index 55ba1c4934..d941185d33 100644 --- a/doc/classes/VoxelGI.xml +++ b/doc/classes/VoxelGI.xml @@ -37,6 +37,7 @@ </member> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(10, 10, 10)"> The size of the area covered by the [VoxelGI]. 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. + [b]Note:[/b] Extents are clamped to 1.0 unit or more on each axis. </member> <member name="subdiv" type="int" setter="set_subdiv" getter="get_subdiv" enum="VoxelGI.Subdiv" default="1"> Number of times to subdivide the grid that the [VoxelGI] operates on. A higher number results in finer detail and thus higher visual quality, while lower numbers result in better performance. diff --git a/doc/classes/XMLParser.xml b/doc/classes/XMLParser.xml index c40a07c40a..79ab33045f 100644 --- a/doc/classes/XMLParser.xml +++ b/doc/classes/XMLParser.xml @@ -32,7 +32,7 @@ <method name="get_current_line" qualifiers="const"> <return type="int" /> <description> - Gets the current line in the parsed file (currently not implemented). + Gets the current line in the parsed file, counting from 0. </description> </method> <method name="get_named_attribute_value" qualifiers="const"> diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py index ce09361dfa..312dffc7ee 100755 --- a/doc/tools/make_rst.py +++ b/doc/tools/make_rst.py @@ -36,6 +36,7 @@ BASE_STRINGS = [ "Signals", "Enumerations", "Constants", + "Annotations", "Property Descriptions", "Constructor Descriptions", "Method Descriptions", @@ -122,16 +123,18 @@ class MethodDef: class ConstantDef: - def __init__(self, name, value, text): # type: (str, str, Optional[str]) -> None + def __init__(self, name, value, text, bitfield): # type: (str, str, Optional[str], Optional[bool]) -> None self.name = name self.value = value self.text = text + self.is_bitfield = bitfield class EnumDef: - def __init__(self, name): # type: (str) -> None + def __init__(self, name, bitfield): # type: (str, Optional[bool]) -> None self.name = name self.values = OrderedDict() # type: OrderedDict[str, ConstantDef] + self.is_bitfield = bitfield class ThemeItemDef: @@ -155,6 +158,7 @@ class ClassDef: self.methods = OrderedDict() # type: OrderedDict[str, List[MethodDef]] self.operators = OrderedDict() # type: OrderedDict[str, List[MethodDef]] self.signals = OrderedDict() # type: OrderedDict[str, SignalDef] + self.annotations = OrderedDict() # type: OrderedDict[str, List[MethodDef]] self.theme_items = OrderedDict() # type: OrderedDict[str, ThemeItemDef] self.inherits = None # type: Optional[str] self.brief_description = None # type: Optional[str] @@ -305,7 +309,8 @@ class State: constant_name = constant.attrib["name"] value = constant.attrib["value"] enum = constant.get("enum") - constant_def = ConstantDef(constant_name, value, constant.text) + is_bitfield = constant.get("is_bitfield") or False + constant_def = ConstantDef(constant_name, value, constant.text, is_bitfield) if enum is None: if constant_name in class_def.constants: print_error('{}.xml: Duplicate constant "{}".'.format(class_name, constant_name), self) @@ -318,11 +323,32 @@ class State: enum_def = class_def.enums[enum] else: - enum_def = EnumDef(enum) + enum_def = EnumDef(enum, is_bitfield) class_def.enums[enum] = enum_def enum_def.values[constant_name] = constant_def + annotations = class_root.find("annotations") + if annotations is not None: + for annotation in annotations: + assert annotation.tag == "annotation" + + annotation_name = annotation.attrib["name"] + qualifiers = annotation.get("qualifiers") + + params = parse_arguments(annotation) + + desc_element = annotation.find("description") + annotation_desc = None + if desc_element is not None: + annotation_desc = desc_element.text + + annotation_def = MethodDef(annotation_name, return_type, params, annotation_desc, qualifiers) + if annotation_name not in class_def.annotations: + class_def.annotations[annotation_name] = [] + + class_def.annotations[annotation_name].append(annotation_def) + signals = class_root.find("signals") if signals is not None: for signal in signals: @@ -706,7 +732,11 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S for value in e.values.values(): f.write(".. _class_{}_constant_{}:\n\n".format(class_name, value.name)) - f.write("enum **{}**:\n\n".format(e.name)) + if e.is_bitfield: + f.write("flags **{}**:\n\n".format(e.name)) + else: + f.write("enum **{}**:\n\n".format(e.name)) + for value in e.values.values(): f.write("- **{}** = **{}**".format(value.name, value.value)) if value.text is not None and value.text.strip() != "": @@ -732,6 +762,26 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S f.write("\n\n") + if len(class_def.annotations) > 0: + f.write(make_heading("Annotations", "-")) + index = 0 + + for method_list in class_def.annotations.values(): + for i, m in enumerate(method_list): + if index != 0: + f.write("----\n\n") + + if i == 0: + f.write(".. _class_{}_annotation_{}:\n\n".format(class_name, m.name.strip("@"))) + + ret_type, signature = make_method_signature(class_def, m, "", state) + f.write("- {} {}\n\n".format(ret_type, signature)) + + if m.description is not None and m.description.strip() != "": + f.write(rstize_text(m.description.strip(), state) + "\n\n") + + index += 1 + # Property descriptions if any(not p.overrides for p in class_def.properties.values()) > 0: f.write(make_heading("Property Descriptions", "-")) @@ -1065,6 +1115,11 @@ def rstize_text(text, state): # type: (str, State) -> str print_error('{}.xml: Unresolved signal "{}".'.format(state.current_class, param), state) ref_type = "_signal" + elif cmd.startswith("annotation"): + if method_param not in class_def.annotations: + print_error('{}.xml: Unresolved annotation "{}".'.format(state.current_class, param), state) + ref_type = "_annotation" + elif cmd.startswith("constant"): found = False diff --git a/doc/translations/ar.po b/doc/translations/ar.po index dcfbccb71c..b21374a37f 100644 --- a/doc/translations/ar.po +++ b/doc/translations/ar.po @@ -12308,10 +12308,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19607,13 +19609,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19623,7 +19629,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19640,23 +19650,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30018,7 +30028,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30592,10 +30605,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30919,6 +30933,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36350,7 +36369,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36463,6 +36482,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50081,8 +50108,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58455,7 +58482,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59052,9 +59103,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60599,6 +60652,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "ÙŠÙرجع جيب التمام \"cosine \" لقيمة المَعلم." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66687,9 +66745,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66718,7 +66777,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/ca.po b/doc/translations/ca.po index 8576fd5bf3..0e33b91074 100644 --- a/doc/translations/ca.po +++ b/doc/translations/ca.po @@ -12252,10 +12252,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19537,13 +19539,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19553,7 +19559,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19570,23 +19580,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29935,7 +29945,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30509,10 +30522,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30835,6 +30849,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36235,7 +36254,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36346,6 +36365,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49925,8 +49952,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58295,7 +58322,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58892,9 +58943,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60431,6 +60484,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66505,9 +66562,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66536,7 +66594,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot index dba0a87744..8d833031fe 100644 --- a/doc/translations/classes.pot +++ b/doc/translations/classes.pot @@ -12132,10 +12132,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19417,13 +19419,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19433,7 +19439,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19450,23 +19460,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29812,7 +29822,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30386,10 +30399,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30712,6 +30726,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36112,7 +36131,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36223,6 +36242,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49802,8 +49829,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58172,7 +58199,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58769,9 +58820,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60308,6 +60361,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66382,9 +66439,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66413,7 +66471,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/cs.po b/doc/translations/cs.po index e6d0fc8c49..85a9d50b28 100644 --- a/doc/translations/cs.po +++ b/doc/translations/cs.po @@ -12653,10 +12653,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19985,13 +19987,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20001,7 +20007,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20018,23 +20028,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30408,7 +30418,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30982,10 +30995,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31309,6 +31323,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36749,7 +36768,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36862,6 +36881,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50499,8 +50526,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58889,7 +58916,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59486,9 +59537,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -61043,6 +61096,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67164,9 +67222,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67195,7 +67254,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/de.po b/doc/translations/de.po index 14a4d14da6..ae8d8f2165 100644 --- a/doc/translations/de.po +++ b/doc/translations/de.po @@ -14222,10 +14222,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -21703,13 +21705,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -21719,7 +21725,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -21736,23 +21746,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -32199,7 +32209,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -32773,10 +32786,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -33104,6 +33118,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -38619,7 +38638,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -38734,6 +38753,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -52484,8 +52511,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -60981,7 +61008,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -61582,9 +61633,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -63158,6 +63211,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Wenn [code]true[/code], wird die Textur zentriert." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -69471,9 +69529,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -69505,7 +69564,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/el.po b/doc/translations/el.po index 782205fcfa..d3cbf69925 100644 --- a/doc/translations/el.po +++ b/doc/translations/el.po @@ -12152,10 +12152,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19452,13 +19454,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19468,7 +19474,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19485,23 +19495,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29863,7 +29873,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30437,10 +30450,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30764,6 +30778,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36189,7 +36208,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36302,6 +36321,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49907,8 +49934,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58281,7 +58308,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58878,9 +58929,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60425,6 +60478,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "ΕπιστÏÎφει το συνημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66513,9 +66571,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66544,7 +66603,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/es.po b/doc/translations/es.po index 242710fe39..e38eb521c0 100644 --- a/doc/translations/es.po +++ b/doc/translations/es.po @@ -15915,10 +15915,12 @@ msgstr "" "horizontales y el tamaño de la pantalla." #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "La cámara se actualiza con la llamada [code]_physics_process[/code]." #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "La cámara se actualiza con la llamada de [code]_process[/code]." @@ -25571,16 +25573,18 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" -"Si [code]true[/code], el detalle de la sombra se sacrifica a cambio de " -"transiciones más suaves entre las divisiones." #: doc/classes/DirectionalLight.xml msgid "" @@ -25591,8 +25595,12 @@ msgstr "" "movimiento. Ver [enum ShadowDepthRange]." #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." -msgstr "La distancia máxima para las divisiones de la sombra." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." +msgstr "" #: doc/classes/DirectionalLight.xml msgid "The light's shadow rendering algorithm. See [enum ShadowMode]." @@ -25606,11 +25614,12 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" "La distancia de la cámara a la sombra se divide en 1. Relativo a [member " "directional_shadow_max_distance]. Sólo se utiliza cuando [member " @@ -25618,11 +25627,12 @@ msgstr "" "[code]SHADOW_PARALLEL_4_SPLITS[/code]." #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" "La distancia de la sombra se divide en dos. Relativo a [member " "directional_shadow_max_distance]. Sólo se utiliza cuando [member " @@ -25630,10 +25640,11 @@ msgstr "" "[code]SHADOW_PARALLEL_4_SPLITS[/code]." #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" "La distancia de la sombra se divide en dos y tres. Relativo a [member " "directional_shadow_max_distance]. Sólo se usa cuando [member " @@ -39542,7 +39553,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" "Habilita o deshabilita la acumulación de eventos de entrada similares " "enviados por el sistema operativo. Cuando la acumulación de entrada está " @@ -40301,10 +40315,11 @@ msgstr "Tipo de evento de entrada para los eventos de movimiento del ratón." msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -40745,6 +40760,12 @@ msgstr "" "automáticamente el nuevo contenido." #: doc/classes/InterpolatedCamera.xml +#, fuzzy +msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "La llamada al proceso de la cámara. Ver [enum Camera2DProcessMode]." + +#: doc/classes/InterpolatedCamera.xml msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." @@ -47706,7 +47727,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -47821,6 +47842,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -65718,12 +65747,13 @@ msgstr "" "documentación del mapeo de sombras." #: doc/classes/ProjectSettings.xml +#, fuzzy msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" -"Tamaño para el atlas de sombras (usado para OmniLights y SpotLights). Vea la " -"documentación." +"Establece el tamaño de las imágenes del atlas de sombras (usado para omni y " +"focos). El valor se redondeará a la potencia más cercana de 2." #: doc/classes/ProjectSettings.xml msgid "" @@ -76413,10 +76443,32 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" -"Formatea la string reemplazando todas las ocurrencias de [code]placeholder[/" -"code] por [code]values[/code]." #: doc/classes/String.xml msgid "If the string is a valid file path, returns the base directory name." @@ -77186,13 +77238,12 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" -"Dibuja este cuadro de estilo usando un [CanvasItem] con un [RID] dado.\n" -"Puedes obtener un valor [RID] usando el [method Object.get_instance_id] en " -"un nodo derivado de [CanvasItem]." #: doc/classes/StyleBox.xml msgid "Returns the size of this [StyleBox] without the margins." @@ -79173,6 +79224,11 @@ msgstr "" "contextual." #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Si [code]true[/code], el cuerpo puede ser detectado por los rayos." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -87155,12 +87211,14 @@ msgstr "" "La cantidad de subdivisión del cuarto cuadrante en el atlas de las sombras." #: doc/classes/Viewport.xml +#, fuzzy msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" "La resolución del atlas de las sombras (usado para luces omni y spot). El " "valor se redondeará a la potencia más cercana de 2.\n" @@ -87197,9 +87255,12 @@ msgid "" msgstr "Si [code]true[/code], el viewport deberÃa hacer su fondo transparente." #: doc/classes/Viewport.xml -#, fuzzy -msgid "The rendering mode of viewport." -msgstr "El modo de selección a utilizar." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." +msgstr "" #: doc/classes/Viewport.xml msgid "" diff --git a/doc/translations/fa.po b/doc/translations/fa.po index a8972b49a5..db8018d209 100644 --- a/doc/translations/fa.po +++ b/doc/translations/fa.po @@ -12573,10 +12573,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19858,13 +19860,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19874,7 +19880,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19891,23 +19901,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30256,7 +30266,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30830,10 +30843,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31156,6 +31170,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36562,7 +36581,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36673,6 +36692,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50264,8 +50291,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58638,7 +58665,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59235,9 +59286,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60774,6 +60827,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66848,9 +66905,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66879,7 +66937,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/fi.po b/doc/translations/fi.po index 9c41935f5e..9317c255a7 100644 --- a/doc/translations/fi.po +++ b/doc/translations/fi.po @@ -12226,10 +12226,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19528,13 +19530,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19544,7 +19550,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19561,23 +19571,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29946,7 +29956,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30520,10 +30533,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30847,6 +30861,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36274,7 +36293,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36387,6 +36406,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49992,8 +50019,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58368,7 +58395,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58965,9 +59016,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60513,6 +60566,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Palauttaa parametrin kosinin." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66606,9 +66664,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66637,7 +66696,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/fil.po b/doc/translations/fil.po index 1ae1d0b02b..f7a8c0fd9b 100644 --- a/doc/translations/fil.po +++ b/doc/translations/fil.po @@ -12148,10 +12148,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19433,13 +19435,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19449,7 +19455,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19466,23 +19476,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29831,7 +29841,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30405,10 +30418,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30731,6 +30745,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36131,7 +36150,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36242,6 +36261,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49821,8 +49848,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58191,7 +58218,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58788,9 +58839,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60327,6 +60380,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66401,9 +66458,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66432,7 +66490,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/fr.po b/doc/translations/fr.po index 2dcac4940b..7b3d3c7435 100644 --- a/doc/translations/fr.po +++ b/doc/translations/fr.po @@ -61,7 +61,7 @@ msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-28 04:52+0000\n" +"PO-Revision-Date: 2022-07-06 04:47+0000\n" "Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/fr/>\n" @@ -985,7 +985,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two values by the factor defined in " "[code]weight[/code]. To perform interpolation, [code]weight[/code] should be " @@ -1005,13 +1004,16 @@ msgid "" "To perform eased interpolation with [method lerp], combine it with [method " "ease] or [method smoothstep]." msgstr "" -"Interpolation linéaire entre deux valeurs par une valeur normalisée. C'est " -"l'inverse de [method inverse_lerp].\n" +"L'interpolation linéaire entre deux valeurs avec un facteur défini par " +"[code]weight[/code]. Pour faire une interpolation, [code]weight[/code] doit " +"être entre [code]0.0[/code] et [code]1.0[/code] (inclus). Pour autant, des " +"valeurs en dehors de cet intervalle sont autorisés pour faire une " +"[i]extrapolation[/i].\n" "Si les arguments [code]from[/code] et [code]to[/code] sont de type [int] ou " -"[float], la valeur de retour est un [float].\n" +"[float], la valeur retournée est un [float].\n" "Si les deux sont du même type de vecteur ([Vector2], [Vector3] ou [Color]), " -"la valeur de retour sera du même type ([code]lerp[/code] appelle alors la " -"méthode du type de vecteur [code]linear_interpolate[/code]).\n" +"la valeur de retour sera du même type (puisque [code]lerp[/code] appelle " +"alors la méthode [code]linear_interpolate[/code] du même type).\n" "[codeblock]\n" "lerp(0, 4, 0.75) # Retourne 3.0\n" "lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Retourne Vector2(2, 3.5)\n" @@ -4060,6 +4062,10 @@ msgid "" "down on the key after it \"bottoms out\". This message is different from " "polyphonic after-touch as it indicates the highest pressure across all keys." msgstr "" +"Le message de pression de canal MIDI. Ce message est le plus souvent envoyé " +"en appuyant sur la touche après qu'il « se retire » . Ce message est " +"différent de l'après-touche polyphonique car il indique la plus haute " +"pression sur toutes les clés." #: doc/classes/@GlobalScope.xml msgid "" @@ -4074,6 +4080,9 @@ msgid "" "MIDI system exclusive message. This has behavior exclusive to the device " "you're receiving input from. Getting this data is not implemented in Godot." msgstr "" +"Le message exclusif du système MIDI. Cela a un comportement exclusif à " +"l'appareil dont vous recevez l'entrée. Obtenir cette donnée n'est pas " +"implémenté dans Godot." #: doc/classes/@GlobalScope.xml msgid "" @@ -4086,30 +4095,43 @@ msgid "" "MIDI song position pointer message. Gives the number of 16th notes since the " "start of the song. Getting this data is not implemented in Godot." msgstr "" +"Le message de position de chanson MIDI. Donne le nombre de seizième de note " +"depuis le début de la chanson. Obtenir cette donnée n'est pas implémenté " +"dans Godot." #: doc/classes/@GlobalScope.xml msgid "" "MIDI song select message. Specifies which sequence or song is to be played. " "Getting this data is not implemented in Godot." msgstr "" +"Le message de sélectionne de la chanson. Spécifie quelle séquence ou quelle " +"chanson doit être jouée. Obtenir cette donnée n'est pas implémenté dans " +"Godot." #: doc/classes/@GlobalScope.xml msgid "" "MIDI tune request message. Upon receiving a tune request, all analog " "synthesizers should tune their oscillators." msgstr "" +"Le message de requête d'accordage MIDI. À la réception d'une requête " +"d'accordage, tous les synthétiseurs analogiques devraient accorder leurs " +"oscillateurs." #: doc/classes/@GlobalScope.xml msgid "" "MIDI timing clock message. Sent 24 times per quarter note when " "synchronization is required." msgstr "" +"Le message d'horloge MIDI. Envoyé 24 fois par quart de note lorsque la " +"synchronisation est requise." #: doc/classes/@GlobalScope.xml msgid "" "MIDI start message. Start the current sequence playing. This message will be " "followed with Timing Clocks." msgstr "" +"Le message de démarrage MIDI. Commence la séquence actuelle. Ce message sera " +"suivi avec un message d'horloge." #: doc/classes/@GlobalScope.xml msgid "MIDI continue message. Continue at the point the sequence was stopped." @@ -5206,7 +5228,6 @@ msgstr "" "entrée, le dialogue sera accepté." #: doc/classes/AcceptDialog.xml -#, fuzzy msgid "" "Removes the [code]button[/code] from the dialog. Does NOT free the " "[code]button[/code]. The [code]button[/code] must be a [Button] added with " @@ -5214,9 +5235,11 @@ msgid "" "the [code]button[/code] will no longer emit this dialog's [signal " "custom_action] signal or cancel this dialog." msgstr "" -"Enlever le [code]bouton[/code] de la boite de la boîte de dialogue. Ne " -"libère PAS le bouton. Le bouton dois être un [Button] ajouté avec la méthode " -"[method add_button] ou [method add_cancel] ." +"Retire le [code]button[/code] de la boite de dialogue. Ne libère PAS le " +"[code]button[/code]. Le [code]button[/code] doit être un [Button] ajouté " +"avec la méthode [method add_button] ou [method add_cancel]. Après être " +"retiré, appuyer sur [code]button[/code] n'émettra plus le signal [signal " +"custom_action] du dialogue ni ne l'annulera." #: doc/classes/AcceptDialog.xml msgid "Sets autowrapping for the text in the dialog." @@ -8408,6 +8431,10 @@ msgid "" "binds animations to animation nodes.\n" "Once set, [Animation] nodes can be added to the [AnimationTreePlayer]." msgstr "" +"Le chemin vers le [AnimationPlayer] d'où cette [AnimationTreePlayer] " +"connecte les animations aux nÅ“uds d'animation.\n" +"Une fois défini, les nÅ“uds [Animation] peuvent être ajoutés au " +"[AnimationTreePlayer]." #: doc/classes/AnimationTreePlayer.xml msgid "The thread in which to update animations." @@ -8592,6 +8619,10 @@ msgid "" "See [member ProjectSettings.physics/3d/default_linear_damp] for more details " "about damping." msgstr "" +"La vitesse à laquelle les objets arrêtent de se déplacer dans cette zone. " +"Représente la vitesse linéaire perdue par seconde.\n" +"Voir [member ProjectSettings.physics/3d/default_linear_damp] pour plus de " +"détails sur l'amortissement." #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "If [code]true[/code], other monitoring areas can detect this area." @@ -10832,6 +10863,9 @@ msgid "" "the AR/VR eyes to [VisualServer]. The value comes from an internal call to " "[method OS.get_ticks_usec]." msgstr "" +"Retourne l'horodatage absolu (en μs) de la dernière mise à jour des yeux AR/" +"VR du [ARVRServer] envoyée au [VisualServer]. La valeur est récupérée via un " +"appel interne à [method OS.get_ticks_usec]" #: doc/classes/ARVRServer.xml msgid "" @@ -10839,6 +10873,9 @@ msgid "" "difference between [method get_last_commit_usec] and [method " "get_last_process_usec] when committing." msgstr "" +"Retourne la durée (en μs) de la dernière trame. Ceci est calculé comme la " +"différence entre [method get_last_commit_usec] et [method " +"get_last_process_usec] lorsque vous commettez." #: doc/classes/ARVRServer.xml msgid "" @@ -10846,6 +10883,9 @@ msgid "" "callback. The value comes from an internal call to [method OS." "get_ticks_usec]." msgstr "" +"Retourne l'horodatage absolu (en μs) du dernier appel de mise à jour du " +"[ARVRServer]. La valeur vient est récupérée via un appel interne à [method " +"OS.get_ticks_usec]" #: doc/classes/ARVRServer.xml msgid "" @@ -12137,6 +12177,8 @@ msgid "" "High-pass filter, in Hz. Frequencies higher than this value will not be " "affected by the distortion. Value can range from 1 to 20000." msgstr "" +"Le filtre passe-haut, en Hz. Les fréquences supérieures à cette valeur ne " +"seront pas affectées par la distorsion. La valeur peut aller de 1 à 20000 Hz." #: doc/classes/AudioEffectDistortion.xml msgid "Distortion type." @@ -12147,12 +12189,16 @@ msgid "" "Increases or decreases the volume after the effect. Value can range from -80 " "to 24." msgstr "" +"Augmente ou diminue le volume sonore après l'application de l'effet. La " +"valeur peut aller de -80 à 24 dB." #: doc/classes/AudioEffectDistortion.xml msgid "" "Increases or decreases the volume before the effect. Value can range from " "-60 to 60." msgstr "" +"Augmente ou diminue le volume sonore avant l'application de l'effet. La " +"valeur peut aller de -60 à 60 dB." #: doc/classes/AudioEffectDistortion.xml msgid "" @@ -12165,6 +12211,8 @@ msgid "" "Low-resolution digital distortion effect. You can use it to emulate the " "sound of early digital audio devices." msgstr "" +"Effet de distorsion numérique à basse résolution. Vous pouvez l'utiliser " +"pour émuler le son des tous premiers périphériques audio numériques." #: doc/classes/AudioEffectDistortion.xml msgid "" @@ -12530,6 +12578,10 @@ msgid "" "are more demanding on the CPU and may cause audio cracking if the CPU can't " "keep up." msgstr "" +"Le facteur de suréchantillonnage à utiliser. Des valeurs plus élevées " +"entraînent une meilleure qualité, mais nécessitent plus de puissance du CPU " +"et peuvent provoquer des craquements audibles si le CPU n'est pas assez " +"puissant." #: doc/classes/AudioEffectPitchShift.xml msgid "" @@ -12818,6 +12870,8 @@ msgid "" "Returns the [AudioEffectInstance] assigned to the given bus and effect " "indices (and optionally channel)." msgstr "" +"Retourne le [AudioEffectInstance] assigné au bus et aux indices de l'effet " +"donnés (et le canal en option)." #: doc/classes/AudioServer.xml msgid "Returns the index of the bus with the name [code]bus_name[/code]." @@ -12832,26 +12886,32 @@ msgid "" "Returns the peak volume of the left speaker at bus index [code]bus_idx[/" "code] and channel index [code]channel[/code]." msgstr "" +"Retourne le volume de crête du haut-parleur gauche à l'index du bus " +"[code]bus_idx[/code] et l'index du canal [code]canal[/code]." #: doc/classes/AudioServer.xml msgid "" "Returns the peak volume of the right speaker at bus index [code]bus_idx[/" "code] and channel index [code]channel[/code]." msgstr "" +"Retourne le volume de crête du haut-parleur droit à l'index de bus " +"[code]bus_idx[/code] et l'index de canal [code]canal[/code]." #: doc/classes/AudioServer.xml msgid "" "Returns the name of the bus that the bus at index [code]bus_idx[/code] sends " "to." msgstr "" +"Retourne le nom du bus vers lequel le bus à l'index [code]bus_idx[/code] " +"envoie l'audio." #: doc/classes/AudioServer.xml msgid "Returns the volume of the bus at index [code]bus_idx[/code] in dB." -msgstr "" +msgstr "Retourne le volume du bus à l'index [code]bus_idx[/code] en dB." #: doc/classes/AudioServer.xml msgid "Returns the names of all audio devices detected on the system." -msgstr "" +msgstr "Retourne les noms de tous les appareils audio détectés sur le système." #: doc/classes/AudioServer.xml #, fuzzy @@ -12887,6 +12947,8 @@ msgid "" "If [code]true[/code], the effect at index [code]effect_idx[/code] on the bus " "at index [code]bus_idx[/code] is enabled." msgstr "" +"Si [code]true[/code], l'effet à l'index [code]effect_idx[/code] sur le bus à " +"l'index [code]bus_idx[/code] est activé." #: doc/classes/AudioServer.xml msgid "If [code]true[/code], the bus at index [code]bus_idx[/code] is muted." @@ -12897,12 +12959,15 @@ msgstr "" msgid "" "If [code]true[/code], the bus at index [code]bus_idx[/code] is in solo mode." msgstr "" +"Si [code]true[/code], le bus à l'index [code]bus_idx[/code] est en mode solo." #: doc/classes/AudioServer.xml msgid "" "Locks the audio driver's main loop.\n" "[b]Note:[/b] Remember to unlock it afterwards." msgstr "" +"Verrouille la boucle principale du pilote audio.\n" +"[b]Note :[/b] Il est important de la déverrouiller après utilisation." #: doc/classes/AudioServer.xml msgid "" @@ -12930,6 +12995,7 @@ msgstr "Remplace le [AudioBusLayout] actuellement utilisé." msgid "" "Sets the name of the bus at index [code]bus_idx[/code] to [code]name[/code]." msgstr "" +"Définit le nom du bus à l'index [code]bus_idx[/code] avec [code]name[/code]." #: doc/classes/AudioServer.xml msgid "" @@ -12944,6 +13010,8 @@ msgid "" "Sets the volume of the bus at index [code]bus_idx[/code] to [code]volume_db[/" "code]." msgstr "" +"Définit le volume du bus à l'index [code]bus_idx[/code] à [code]volume_db[/" +"code]." #: doc/classes/AudioServer.xml msgid "Swaps the position of two effects in bus [code]bus_idx[/code]." @@ -12954,6 +13022,8 @@ msgid "" "Unlocks the audio driver's main loop. (After locking it, you should always " "unlock it.)" msgstr "" +"Déverrouille la boucle principale du pilote audio. (Après le verrouillage, " +"vous devriez toujours le déverrouiller.)" #: doc/classes/AudioServer.xml msgid "Number of available audio buses." @@ -12998,6 +13068,8 @@ msgid "" "Scales the rate at which audio is played (i.e. setting it to [code]0.5[/" "code] will make the audio be played twice as fast)." msgstr "" +"Mets à l'échelle la fréquence à laquelle l'audio est joué (c'est-à -dire que " +"la valeur [code]0.5[/code] jouera l'audio deux fois plus vite)." #: doc/classes/AudioServer.xml msgid "Emitted when the [AudioBusLayout] changes." @@ -13029,6 +13101,9 @@ msgid "" "music playback, and support WAV (via [AudioStreamSample]) and OGG (via " "[AudioStreamOGGVorbis]) file formats." msgstr "" +"La classe de base pour les flux audio. Les flux audio sont utilisés pour les " +"effets sonores et la lecture de musique, et supportent les formats de " +"fichiers WAV (via [AudioStreamSample)] et OGG (via [AudioStreamOGGVorbis)]." #: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml msgid "Audio streams" @@ -13060,6 +13135,15 @@ msgid "" "class from GDScript, consider using a lower [member mix_rate] such as 11,025 " "Hz or 22,050 Hz." msgstr "" +"Ce flux audio ne joue pas de sons par défaut, les données audio doivent être " +"générées à partir d'un script. Voir aussi [AudioStreamGeneratorPlayback].\n" +"Voir aussi [AudioEffectSpectrumAnalyzer] pour l'analyse spectrale de l'audio " +"en temps réel.\n" +"[b]Note :[/b] En raison des contraintes de performance, il est préférable " +"d'utiliser cette classe à partir de code C# ou d'un langage compilée via " +"GDNative. Si vous souhaitez tout de même utiliser cette classe avec " +"GDScript, envisagez d'utiliser une fréquence [member mix_rate] plus faible " +"comme 11025 Hz ou 22050 Hz." #: doc/classes/AudioStreamGenerator.xml msgid "" @@ -13068,6 +13152,11 @@ msgid "" "resulting in increased CPU usage and more risk for audio cracking if the CPU " "can't keep up." msgstr "" +"La longueur de la mémoire tampon à générer (en secondes). Les valeurs " +"inférieures entraînent moins de latence, mais exigent que le script génère " +"les données audio plus rapidement, ce qui entraîne une utilisation plus " +"important du CPU et plus de risques de craquements audio si le CPU n'est pas " +"assez puissant." #: doc/classes/AudioStreamGenerator.xml msgid "" @@ -13130,6 +13219,11 @@ msgid "" "added again. Therefore, make sure your script can always generate and push " "new audio frames fast enough to avoid audio cracking." msgstr "" +"Retourne le nombre de frames de données audio restantes à jouer. Si ce " +"nombre atteint [code]0[/code], l'audio cessera de jouer jusqu'à ce que de " +"nouvelles frames soient ajoutés. Par conséquent, assurez-vous que votre " +"script peut toujours générer et pousser de nouveaux frames audio assez " +"rapidement pour éviter les craquements audio." #: doc/classes/AudioStreamGeneratorPlayback.xml msgid "" @@ -13137,6 +13231,10 @@ msgid "" "efficient than [method push_frame] in C# and compiled languages via " "GDNative, but [method push_buffer] may be [i]less[/i] efficient in GDScript." msgstr "" +"Ajoute plusieurs frames de données audio dans la mémoire tampon. Ceci est " +"généralement plus efficace que [method push_frame] pour le C# et les " +"langages compilés avec GDNative, mais [method push_buffer] peut être " +"[i]moins[/i] efficace avec GDScript." #: doc/classes/AudioStreamGeneratorPlayback.xml msgid "" @@ -13144,6 +13242,10 @@ msgid "" "efficient than [method push_buffer] in C# and compiled languages via " "GDNative, but [method push_frame] may be [i]more[/i] efficient in GDScript." msgstr "" +"Ajouter une seule frame de données audio dans la mémoire tampon. Ceci est " +"généralement moins efficace que [method push_buffer] pour le C# et les " +"langages compilés avec GDNative, mais [method push_frame] peut être " +"[i]moins[/i] efficace avec GDScript." #: modules/minimp3/doc_classes/AudioStreamMP3.xml #, fuzzy @@ -13167,7 +13269,7 @@ msgstr "" #: modules/minimp3/doc_classes/AudioStreamMP3.xml #: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml msgid "Time in seconds at which the stream starts after being looped." -msgstr "" +msgstr "Le temps en secondes où le flux commence après avoir bouclé." #: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml msgid "OGG Vorbis audio stream driver." @@ -13182,6 +13284,8 @@ msgid "" "Can play, loop, pause a scroll through audio. See [AudioStream] and " "[AudioStreamOGGVorbis] for usage." msgstr "" +"Peut jouer, boucler, faire pause dans l'audio. Voir [AudioStream] et " +"[AudioStreamOGGVorbis] pour l'utilisation." #: doc/classes/AudioStreamPlayer.xml msgid "Plays back audio non-positionally." @@ -13193,6 +13297,9 @@ msgid "" "To play audio positionally, use [AudioStreamPlayer2D] or " "[AudioStreamPlayer3D] instead of [AudioStreamPlayer]." msgstr "" +"Joue un flux audio indépendamment de la position.\n" +"Pour jouer audio en fonction de la position, utilisez [AudioStreamPlayer2D] " +"ou [AudioStreamPlayer3D] au lieu de [AudioStreamPlayer]." #: doc/classes/AudioStreamPlayer.xml msgid "Returns the position in the [AudioStream] in seconds." @@ -13281,6 +13388,7 @@ msgstr "L'audio sera joué sur tous les canaux surround." msgid "" "The audio will be played on the second channel, which is usually the center." msgstr "" +"L'audio sera joué sur le deuxième canal, qui est généralement le centre." #: doc/classes/AudioStreamPlayer2D.xml msgid "Plays positional sound in 2D space." @@ -13295,6 +13403,13 @@ msgid "" "[member volume_db] to a very low value like [code]-100[/code] (which isn't " "audible to human hearing)." msgstr "" +"Joue l'audio étant amortit suivan la distance du centre d'écran.\n" +"Voir aussi [AudioStreamPlayer] pour jouer un son indépendemment de la " +"position.\n" +"[b]Note :[/b] Masquer un nÅ“ud [AudioStreamPlayer2D] ne désactive pas sa " +"sortie audio. Pour désactiver temporairement la sortie audio d'un " +"[AudioStreamPlayer2D], choisissez une valeur très basse pour [member " +"volume_db] comme [code]-100[/code] (qui n'est pas audible humainement)." #: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml msgid "Returns the position in the [AudioStream]." @@ -13324,6 +13439,12 @@ msgid "" "\"water\" area so that sounds played in the water are redirected through an " "audio bus to make them sound like they are being played underwater." msgstr "" +"Détermine quelles calques du [Area2D] affectent le son pour les effets de " +"réverbération et du bus audio. Les zones peuvent être utilisées pour " +"rediriger le [AudioStream] afin qu'ils soient joués dans un certain bus " +"audio. Un exemple de la façon dont vous pouvez utiliser ceci est de faire " +"une zone \"eau\" de sorte que les sons joués dans l'eau sont redirigés par " +"un bus audio pour les faire sonner comme ils étaient joués sous l'eau." #: doc/classes/AudioStreamPlayer2D.xml msgid "Dampens audio over distance with this as an exponent." @@ -13399,6 +13520,10 @@ msgid "" "disable the dampening effect entirely, set this to [code]20500[/code] as " "this frequency is above the human hearing limit." msgstr "" +"Amortit l'audio en utilisant un filtre passe-bas au-dessus de la fréquence " +"spécifiée, en Hz. Pour désactiver entièrement l'effet d'amortissement, " +"définissez la fréquence à [code]20500[/code] car cette fréquence est " +"supérieure à la limite de l'audition humaine." #: doc/classes/AudioStreamPlayer3D.xml msgid "Amount how much the filter affects the loudness, in decibels." @@ -13579,6 +13704,13 @@ msgid "" "This class can also be used to store dynamically-generated PCM audio data. " "See also [AudioStreamGenerator] for procedural audio generation." msgstr "" +"AudioStreamSample stocke des échantillons sonores chargés depuis des " +"fichiers WAV. Pour jouer le son enregistré, utilisez un [AudioStreamPlayer] " +"(pour l'audio indépendamment de la position) ou AudioStreamPlayer2D]/" +"[AudioStreamPlayer3D (en fonction de la position). Le son peut être bouclé.\n" +"Cette classe peut également être utilisée pour stocker des données audio " +"dynamiques au format PCM. Voir aussi [AudioStreamGenerator] pour la " +"génération audio procédurale." #: doc/classes/AudioStreamSample.xml msgid "" @@ -13587,6 +13719,11 @@ msgid "" "[b]Note:[/b] A [code].wav[/code] extension is automatically appended to " "[code]path[/code] if it is missing." msgstr "" +"Enregistre le AudioStreamSample dans un fichier WAV à l'emplacement " +"[code]path[/code]. Les échantillons au format IMA ADPCM peuvent être " +"enregistrés.\n" +"[b]Note :[/b] L'extension [code].wav[/code] est automatiquement ajoutée au " +"[code]path[/code] si elle manque." #: doc/classes/AudioStreamSample.xml msgid "" @@ -13594,6 +13731,10 @@ msgid "" "[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned " "PCM8 to signed PCM8, subtract 128 from each byte." msgstr "" +"Contient les données audio en octets.\n" +"[b]Note :[/b] Cette propriété s'attend à des données PCM8 signées. Pour " +"convertir des PCM8 non signés en PCM8, il faut soustraire 128 de chaque " +"octet." #: doc/classes/AudioStreamSample.xml msgid "Audio format. See [enum Format] constants for values." @@ -13607,6 +13748,9 @@ msgid "" "sample). This information will be imported automatically from the WAV file " "if present." msgstr "" +"Le point de départ de la boucle (en nombre de frames depuis le début de " +"l'échantillon). Ces informations seront automatiquement importées depuis le " +"fichier WAV si elles y sont présentes." #: doc/classes/AudioStreamSample.xml msgid "" @@ -13614,12 +13758,18 @@ msgid "" "sample). This information will be imported automatically from the WAV file " "if present." msgstr "" +"Le point de fin de la boucle (en nombre de frames depuis le début de " +"l'échantillon). Ces informations seront automatiquement importées depuis le " +"fichier WAV si elles y sont présentes." #: doc/classes/AudioStreamSample.xml msgid "" "The loop mode. This information will be imported automatically from the WAV " "file if present. See [enum LoopMode] constants for values." msgstr "" +"Le mode de boucle. Ces informations seront automatiquement importées depuis " +"fichier WAV si elles y sont présentes. Voir les constantes [enum LoopMode] " +"pour les valeurs possibles." #: doc/classes/AudioStreamSample.xml msgid "" @@ -13683,6 +13833,8 @@ msgid "" "Audio loops the data between [member loop_begin] and [member loop_end], " "playing back and forth." msgstr "" +"Les données audio bouclent entre [member loop_begin] et [member loop_end], " +"jouant en arrière puis en avant." #: doc/classes/AudioStreamSample.xml msgid "" @@ -13698,6 +13850,9 @@ msgid "" "accessed in your shader scripts through the " "[code]texture(SCREEN_TEXTURE, ...)[/code] function." msgstr "" +"Copie une région de l'écran (ou l'écran entier) vers une mémoire tampon afin " +"qu'il puisse être accédé dans vos shaders avec la fonction " +"[code]texture(SCREEN_TEXTURE, ...)[/code]." #: doc/classes/BackBufferCopy.xml msgid "" @@ -13801,6 +13956,17 @@ msgid "" "[b]Note:[/b] [member bounce_indirect_energy] only has an effect if [member " "bounces] is set to a value greater than or equal to [code]1[/code]." msgstr "" +"Le multiplicateur d'énergie à chaque rebond. Des valeurs plus élevées " +"rendront l'éclairage indirect plus lumineux. Une valeur de [code]1.0[/code] " +"représente un comportement physiquement réaliste, mais des valeurs plus " +"élevées peuvent être utilisées pour rendre l'éclairage indirect plus visible " +"avec un faible nombre de rebonds. Cela peut être utilisé pour accélérer les " +"temps de calcul des lumières en réduisant le nombre de [member bounces] puis " +"en augmentant [member bounce_indirect_energy]. Contrairement à [member " +"BakedLightmapData.energy], cette propriété n'affecte pas l'éclairage direct " +"émis par les lumières, les matériaux avec émission et l'environnement.\n" +"[b]Note :[/b] [member bounce_indirect_energy] a seulement un effet si " +"[member bounces] est à une valeur supérieure ou égale à [code]1[/code]." #: doc/classes/BakedLightmap.xml msgid "" @@ -13850,6 +14016,9 @@ msgid "" "[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant " "ENVIRONMENT_MODE_CUSTOM_SKY]." msgstr "" +"Le facteur d'énergie lorsque [member environment_mode] est défini à " +"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] ou [constant " +"ENVIRONMENT_MODE_CUSTOM_SKY]." #: doc/classes/BakedLightmap.xml msgid "" @@ -14027,17 +14196,25 @@ msgid "" "directly (it doesn't display anything). Other types of buttons inherit from " "it." msgstr "" +"BaseButton est la classe de base abstraite pour les boutons, elle ne doit " +"donc pas être utilisée directement (elle ne montre rien du tout). D'autres " +"types de boutons héritent de cette classe." #: doc/classes/BaseButton.xml msgid "" "Called when the button is pressed. If you need to know the button's pressed " "state (and [member toggle_mode] is active), use [method _toggled] instead." msgstr "" +"Appelé quand le bouton est pressé. Si vous avez besoin de connaître l'état " +"du bouton activé (et que [member toggle_mode] est actif), utilisez plutôt " +"[méthode _toggled]." #: doc/classes/BaseButton.xml msgid "" "Called when the button is toggled (only if [member toggle_mode] is active)." msgstr "" +"Appelé quand un bouton est basculé (seulement si [member toggle_mode] est " +"actif)." #: doc/classes/BaseButton.xml msgid "" @@ -14046,6 +14223,10 @@ msgid "" "to \"draw\" signal. The visual state of the button is defined by the [enum " "DrawMode] enum." msgstr "" +"Retourne l'état visuel utilisé pour dessiner le bouton. Ceci est utile " +"surtout pour implémenter votre propre code d'affichage en surchargeant " +"_draw() ou en se connectant au signal \"draw\". L'état visuel du bouton est " +"défini par l'enumération [enum DrawMode]." #: doc/classes/BaseButton.xml #, fuzzy @@ -14065,6 +14246,13 @@ msgid "" "[b]Note:[/b] This method doesn't unpress other buttons in its button [member " "group]." msgstr "" +"Change l'état [member pressed] du bouton, sans émettre le signal [signal " +"toggled]. Utilisez lorsque vous voulez simplement changer l'état du bouton " +"sans envoyer l'événement quand il est manuellement pressé (par exemple au " +"moment de l'initialisation de la scène). Fonctionne seulement si [member " +"toggle_mode] est [code]true[/code].\n" +"[b]Note :[/b] Cette méthode ne déselectionne pas les autres boutons dans son " +"[member group]." #: doc/classes/BaseButton.xml msgid "" @@ -14080,12 +14268,18 @@ msgid "" "To allow both left-click and right-click, use [code]BUTTON_MASK_LEFT | " "BUTTON_MASK_RIGHT[/code]." msgstr "" +"La masque binaire pour choisir quels boutons de clic de la souris permet " +"d'appuyer sur ce bouton.\n" +"Pour permettre à la fois le clic gauche et le clic droit, utilisez " +"[code]BUTTON_MASK_LEFT | BUTTON_MASK_RIGHT[/code]." #: doc/classes/BaseButton.xml msgid "" "If [code]true[/code], the button is in disabled state and can't be clicked " "or toggled." msgstr "" +"Si [code]true[/code], le bouton est désactivé et il ne peut donc pas être " +"appuyé ou basculé." #: doc/classes/BaseButton.xml msgid "" @@ -14093,6 +14287,9 @@ msgid "" "will be removed in Godot 4.0. This property no longer has any effect when " "set. Please use [member Control.focus_mode] instead." msgstr "" +"[i]Obsolète.[/i] Cette propriété est obsolète en raison de sa redondance et " +"sera enlevée dans Godot 4.0. Cette propriété n'a plus d'effet quand elle est " +"définie. Veuillez plutôt utiliser [member Control.focus_mode]." #: doc/classes/BaseButton.xml msgid "[ButtonGroup] associated to the button." @@ -14106,6 +14303,11 @@ msgid "" "Signals will be emitted at the same moment regardless of this property's " "value." msgstr "" +"Si [code]true[/code], le bouton reste pressé quand le clic est maintenu mais " +"que le curseur est déplacé en dehors du bouton.\n" +"[b]Note :[/b] Cette propriété n'affecte que l'aspect visuel du bouton. Les " +"signaux seront toujours émis au même moment, peu importe la valeur de cette " +"propriété." #: doc/classes/BaseButton.xml msgid "" @@ -14116,6 +14318,12 @@ msgid "" "emitted. If you want to change the pressed state without emitting that " "signal, use [method set_pressed_no_signal]." msgstr "" +"Si [code]true[/code], l'état du bouton est appuyé. Ce qui signifie que le " +"bouton est soit appuyé ou basculé (si [member toggle_mode] est actif). Ne " +"fonctionne que si [member toggle_mode] est [code]true[/code].\n" +"[b]Note :[/b] Activer [member pressed] émettra le signal [signal toggled]. " +"Si vous voulez changer l'état pressé sans émettre ce signal, utilisez plutôt " +"[method set_pressed_no_signal]." #: doc/classes/BaseButton.xml msgid "[ShortCut] associated to the button." @@ -14164,6 +14372,8 @@ msgid "" "The normal state (i.e. not pressed, not hovered, not toggled and enabled) of " "buttons." msgstr "" +"L'état normal (c'est-à -dire non pressé, non survolé, non basculé ni activé) " +"des boutons." #: doc/classes/BaseButton.xml msgid "The state of buttons are pressed." @@ -14210,6 +14420,17 @@ msgid "" "For more information, read the \"Matrices and transforms\" documentation " "article." msgstr "" +"Une matrice 3×3 utilisée pour la rotation et la mise à l'échelle en 3D. " +"Presque toujours utilisé comme base orthogonale pour une Transform.\n" +"Contient 3 champs vectoriels X, Y et Z qui composent ses colonnes, qui sont " +"généralement interprétées comme les vecteurs de base locaux d'une " +"transformation. Pour une telle utilisation, c'est composé d'une mise à " +"l'échelle et d'une matrice de rotation, dans cet ordre (M = R.S)\n" +"Peut également être accessible comme un tableau de vecteurs 3D. Ces vecteurs " +"sont normalement orthogonaux l'un avec l'autre, mais ne sont pas " +"nécessairement normalisés (en raison de la mise à l'échelle).\n" +"Pour plus d'informations, lisez l'article de documentation « Matrices et " +"transformations »." #: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml msgid "Matrices and transforms" @@ -14221,7 +14442,6 @@ msgstr "Utiliser les transformations 3D" #: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml #: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml -#, fuzzy msgid "Matrix Transform Demo" msgstr "Démo de transformation matricielle" @@ -14256,16 +14476,21 @@ msgid "" "Consider using the [Quat] constructor instead, which uses a quaternion " "instead of Euler angles." msgstr "" +"Construit une matrice de base de rotation pure à partir des angles d'Euler " +"spécifiés (suivant la convention YXZ : lors de la *composition*, d'abord Y, " +"puis X, et enfin Z), qui sont donnés dans un vecteur comme (angle X, angle " +"Y, angle Z).\n" +"Vous pouvez considérer l'utilisation du constructeur [Quat], qui utilise un " +"quaternion au lieu des angles d'Euler." #: doc/classes/Basis.xml -#, fuzzy msgid "" "Constructs a pure rotation basis matrix, rotated around the given " "[code]axis[/code] by [code]angle[/code] (in radians). The axis must be a " "normalized vector." msgstr "" -"Construit un quaternion qui tournera autour de l'axe donné selon l'angle " -"spécifié. L'axe doit être un vecteur normalisé." +"Construit un quaternion qui tournera autour de l'axe [code]axis[/code] par " +"[code]angle[/code] (en radians). L'axe doit être un vecteur normalisé." #: doc/classes/Basis.xml msgid "Constructs a basis matrix from 3 axis vectors (matrix columns)." @@ -14387,18 +14612,24 @@ msgid "" "The basis matrix's X vector (column 0). Equivalent to array index [code]0[/" "code]." msgstr "" +"Le vecteur X (la colonne 0) de la matrice de la base. Équivalent à l'index " +"de tableau [code]0[/code]." #: doc/classes/Basis.xml doc/classes/Transform2D.xml msgid "" "The basis matrix's Y vector (column 1). Equivalent to array index [code]1[/" "code]." msgstr "" +"Le vecteur Y (la colonne 1) de la matrice de la base. Équivalent à l'index " +"de tableau [code]1[/code]." #: doc/classes/Basis.xml msgid "" "The basis matrix's Z vector (column 2). Equivalent to array index [code]2[/" "code]." msgstr "" +"Le vecteur Z (la colonne 2) de la matrice de la base. Équivalent à l'index " +"de tableau [code]2[/code]." #: doc/classes/Basis.xml msgid "" @@ -14407,24 +14638,34 @@ msgid "" "This constant can be used to make your code clearer, and for consistency " "with C#." msgstr "" +"La base d'identité, sans rotation ni mise à l'échelle.\n" +"Ceci est identique à [code]Basis()[/code] sans aucun paramètre. Cette " +"constante peut être utilisée pour que votre code soit plus clair, et pour la " +"cohérence avec C#." #: doc/classes/Basis.xml msgid "" "The basis that will flip something along the X axis when used in a " "transformation." msgstr "" +"La base qui appliquera un effet miroir suivant l'axe X lorsqu'elle est " +"utilisée dans une transformation." #: doc/classes/Basis.xml msgid "" "The basis that will flip something along the Y axis when used in a " "transformation." msgstr "" +"La base qui appliquera un effet miroir suivant l'axe Y lorsqu'elle est " +"utilisée dans une transformation." #: doc/classes/Basis.xml msgid "" "The basis that will flip something along the Z axis when used in a " "transformation." msgstr "" +"La base qui appliquera un effet miroir suivant l'axe Z lorsqu'elle est " +"utilisée dans une transformation." #: doc/classes/BitMap.xml msgid "Boolean matrix." @@ -14436,6 +14677,10 @@ msgid "" "a binary matrix (every matrix element takes only one bit) and query the " "values using natural cartesian coordinates." msgstr "" +"Un tableau bidimensionnel de valeurs booléennes, peut être utilisé pour " +"stocker efficacement une matrice binaire (chaque élément matrice ne contient " +"qu'un bit) et faire des requêtes sur ces valeurs à l'aide de coordonnées " +"naturelles cartésiennes." #: doc/classes/BitMap.xml msgid "" @@ -14444,6 +14689,10 @@ msgid "" "are being converted into white pixels, and [code]false[/code] bits into " "black." msgstr "" +"Retourne une image de la même taille que la bitmap au format [enum.Format] " +"du type [code]FORMAT_L8[/code]. Les valeurs [code]true[/code] de l'image " +"seront converties en pixels blancs, et les valeurs [code]false[/code] en " +"noir." #: doc/classes/BitMap.xml msgid "" @@ -14459,6 +14708,10 @@ msgid "" "that position is equal to [code]threshold[/code] or less, and [code]true[/" "code] in other case." msgstr "" +"Crée un bitmap qui correspond aux dimensions de l'image donnée, chaque " +"élément du bitmap sera remplacé par [code]false[/code] si l'opacité de ce " +"pixel est inférieur ou égal à [code]threshold[/code], et [code]true[/code] " +"sinon." #: doc/classes/BitMap.xml msgid "Returns bitmap's value at the specified position." @@ -14481,6 +14734,12 @@ msgid "" "area where the morphological operation is applied. Pixels located outside " "the [code]rect[/code] are unaffected by [method grow_mask]." msgstr "" +"Applique une dilatation ou une érosion morphologique du bitmap. Si " +"[code]pixels[/code] est positif, une dilatation est appliquée au bitmap. Si " +"[code]pixels[/code] est négatif, une érosion est appliquée. [code]rect[/" +"code] définit la zone où l'opération morphologique est appliquée. Les pixels " +"situés à l'extérieur du [code]rect[/code] ne sont pas affectés par [method " +"grow_mask]." #: doc/classes/BitMap.xml msgid "Resizes the image to [code]new_size[/code]." @@ -14607,6 +14866,9 @@ msgid "" "Returns the node's [member rest] [code]Transform2D[/code] if it doesn't have " "a parent, or its rest pose relative to its parent." msgstr "" +"Retourne la [code]Transform2D[/code] du nÅ“ud pour la position de repos " +"[member rest] s'il n'a pas de parent, ou si sa position de repos est " +"relative à son parent." #: doc/classes/Bone2D.xml msgid "" @@ -14633,6 +14895,9 @@ msgid "" "for this node to attach to. The BoneAttachment node will copy the transform " "of the selected bone." msgstr "" +"Ce nÅ“ud doit être l'enfant d'un nÅ“ud [Skeleton]. Vous pouvez alors " +"sélectionner un os pour que ce nÅ“ud soit attaché. Le nÅ“ud BoneAttachment " +"copiera la transformation de l'os sélectionné." #: doc/classes/BoneAttachment.xml msgid "The name of the attached bone." @@ -14767,6 +15032,11 @@ msgid "" "Examples: [code]bool(\"False\")[/code] returns [code]true[/code], " "[code]bool(\"\")[/code] returns [code]false[/code]." msgstr "" +"Convertit une valeur [String] en valeur booléenne, cette méthode retournera " +"[code]false[/code] si [code]\"\"[/code] est donné, et [code]true[/code] pour " +"toute chaîne non vide.\n" +"Exemples : [code]bool(\"False\")[/code] retourne [code]true[/code], " +"[code]bool(\"\")[/code] retourne [code]false[/code]." #: doc/classes/BoxContainer.xml msgid "Base class for box containers." @@ -14777,12 +15047,16 @@ msgid "" "Arranges child controls vertically or horizontally, and rearranges the " "controls automatically when their minimum size changes." msgstr "" +"Arrange les contrôles enfants verticalement ou horizontalement, et " +"réorganise les contrôles automatiquement lorsque leur taille minimale change." #: doc/classes/BoxContainer.xml msgid "" "Adds a control to the box as a spacer. If [code]true[/code], [code]begin[/" "code] will insert the spacer control in front of other children." msgstr "" +"Ajoute un contrôle à la boîte comme espace. Si [code]true[/code], " +"[code]begin[/code] insérera le contrôle d'espace devant les autres enfants." #: doc/classes/BoxContainer.xml msgid "" @@ -14819,20 +15093,22 @@ msgstr "" #: doc/classes/RigidBody.xml doc/classes/SphereShape.xml #: doc/classes/StaticBody.xml msgid "3D Physics Tests Demo" -msgstr "" +msgstr "Démo des tests de physique 3D" #: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml #: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml #: doc/classes/Mesh.xml doc/classes/MeshInstance.xml #: doc/classes/MeshLibrary.xml msgid "3D Kinematic Character Demo" -msgstr "" +msgstr "Démo de caractère cinématique 3D" #: doc/classes/BoxShape.xml msgid "" "The box's half extents. The width, height and depth of this shape is twice " "the half extents." msgstr "" +"La demi-étendue de la boîte. La largeur, la hauteur et la profondeur de " +"cette forme sont deux fois plus larges." #: doc/classes/Button.xml msgid "Standard themed Button." @@ -14893,7 +15169,7 @@ msgstr "" #: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml #: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml msgid "OS Test Demo" -msgstr "" +msgstr "Démo de test de système d'exploitation" #: doc/classes/Button.xml msgid "" @@ -14909,12 +15185,17 @@ msgid "" "clipped, when disabled the Button will always be wide enough to hold the " "text." msgstr "" +"Lorsque cette propriété est activée, un texte trop grand pour ce bouton sera " +"tronqué, et lorsque le bouton est désactivé, il sera toujours assez grand " +"pour contenir tout le texte." #: doc/classes/Button.xml msgid "" "When enabled, the button's icon will expand/shrink to fit the button's size " "while keeping its aspect." msgstr "" +"Lorsque actif, l'icône du bouton s'étendra/se réduira selon la taille du " +"bouton et gardera son aspect." #: doc/classes/Button.xml msgid "Flat buttons don't display decoration." @@ -14927,6 +15208,11 @@ msgid "" "property of [Button] and [code]content_margin_*[/code] properties of the " "used [StyleBox]es." msgstr "" +"L'icône du bouton, si le texte est présent, l'icône sera placée avant le " +"texte.\n" +"Pour modifier la marge et l'espacement de l'icône, utilisez la propriété " +"[code]hseparation[/code] du thème pour le [Button] et les propriétés " +"[code]content_margin_*[/code] de la [StyleBox] utilisée." #: doc/classes/Button.xml msgid "" @@ -14934,6 +15220,10 @@ msgid "" "button. Uses the same [enum TextAlign] constants as the text alignment. If " "centered, text will draw on top of the icon." msgstr "" +"Spécifie si l'icône doit être alignée sur la gauche, la droite ou au centre " +"d'un bouton. Utilisez les mêmes constantes [enum TextAlign] que pour " +"l'alignement du texte. Si l'icône est centrée, elle sera affichée sous le " +"texte." #: doc/classes/Button.xml doc/classes/LinkButton.xml msgid "The button's text that will be displayed inside the button's area." @@ -14965,6 +15255,9 @@ msgid "" "text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"La [Color] du texte utilisée lorsque le [Button] a le focus. Ne fait que " +"remplacer la couleur normale du texte du bouton. Les couleurs définies pour " +"les états désactivé, survolé et pressé sont prioritaires sur cette couleur." #: doc/classes/Button.xml msgid "Text [Color] used when the [Button] is being hovered." @@ -14992,6 +15285,9 @@ msgid "" "current [StyleBox], so using [StyleBoxEmpty] will just disable the focus " "visual effect." msgstr "" +"La [StyleBox] utilisée lorsque le [Button] a le focus. Elle est affichée par " +"dessus la [StyleBox] actuelle, donc en utilisant [StyleBoxEmpty], ne fera " +"que désactiver l'effet visuel quand le bouton a le focus." #: doc/classes/Button.xml msgid "[StyleBox] used when the [Button] is being hovered." @@ -15015,6 +15311,10 @@ msgid "" "Only one allows being pressed.\n" "[member BaseButton.toggle_mode] should be [code]true[/code]." msgstr "" +"Un groupe de [Button]. Tous les boutons enfants directs et indirects " +"deviennent des boutons radios. Un seul de ces boutons peut être pressé à la " +"fois.\n" +"[member BaseButton.toggle_mode] devrait être [code]true[/code]." #: doc/classes/ButtonGroup.xml msgid "" @@ -15098,6 +15398,9 @@ msgid "" "[code]enable_next[/code] is [code]true[/code], request to make the next " "camera current, if any." msgstr "" +"Si c'est la caméra actuelle, elle ne sera plus l'actuelle. Si " +"[code]enable_next[/code] est [code]true[/code], passe à la caméra suivante " +"pour la rendre actuelle, s'il y en a une." #: doc/classes/Camera.xml msgid "Returns the camera's RID from the [VisualServer]." @@ -15110,6 +15413,10 @@ msgid "" "to the position and orientation of the camera by subclassed cameras such as " "[ClippedCamera], [InterpolatedCamera] and [ARVRCamera]." msgstr "" +"Retourne la transformation de la caméra avec les décalages vertical ([member " +"v_offset]) et horizontal ([member h_offset]) ; et tout autre ajustement " +"apporté à la position et à l'orientation de la caméra par les sous-classes " +"de caméra comme [ClippedCamera], [InterpolatedCamera] et [ARVRCamera]." #: doc/classes/Camera.xml msgid "" @@ -15539,6 +15846,9 @@ msgid "" "The custom [Viewport] node attached to the [Camera2D]. If [code]null[/code] " "or not a [Viewport], uses the default viewport instead." msgstr "" +"Le nÅ“ud [Viewport] personnalisé attaché à la [Camera2D]. Si [code]null[/" +"code] ou que ça n'est pas un [Viewport], ça utilise la fenêtre d'affichage " +"par défaut à la place." #: doc/classes/Camera2D.xml msgid "" @@ -15627,6 +15937,13 @@ msgid "" "without smoothing, even with this setting enabled, invoke [method " "reset_smoothing]." msgstr "" +"Si [code]true[/code], la caméra s'arrête en douceur quand elle atteint ses " +"limites.\n" +"Cette propriété n'a aucun effet si [member smoothing_enabled] est " +"[code]false[/code].\n" +"[b]Note :[/b] Pour mettre immédiatement à jour la position de la caméra " +"activée sans ralenti, même avec ce réglage activé, appelez [method " +"reset_smoothing]." #: doc/classes/Camera2D.xml msgid "" @@ -15679,6 +15996,8 @@ msgid "" "Speed in pixels per second of the camera's smoothing effect when [member " "smoothing_enabled] is [code]true[/code]." msgstr "" +"La vitesse en pixels par seconde de l'effet de ralenti de la caméra quand " +"[member smoothing_enabled] est [code]true[/code]." #: doc/classes/Camera2D.xml msgid "" @@ -15687,6 +16006,10 @@ msgid "" "example, use [code]Vector2(0.5, 0.5)[/code] for a 2× zoom-in, and " "[code]Vector2(4, 4)[/code] for a 4× zoom-out." msgstr "" +"Le zoom de l'appareil photo relatif à la fenêtre d'affichage. Les valeurs " +"supérieures à [code]Vector2(1, 1)[/code] font un zoom arrière et les valeurs " +"plus petites un zoom avant. Par exemple, utilisez [code]Vector2(0.5, 0.5)[/" +"code] pour un zoom à 50%, et [code]Vector2(4, 4)[/code] pour un zoom 4×." #: doc/classes/Camera2D.xml msgid "" @@ -15705,10 +16028,12 @@ msgstr "" "et la taille de l'écran." #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "La caméra se met à jour avec le rappel [code]_physics_process[/code]." #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "La caméra se met à jour durant l'appel de [code]_process[/code]." @@ -16082,6 +16407,8 @@ msgid "" "Draws a [Mesh] in 2D, using the provided texture. See [MeshInstance2D] for " "related documentation." msgstr "" +"Dessine un [Mesh] en 2D, en utilisant la texture spécifiée. Voir " +"[MeshInstance2D] pour la documentation en rapport." #: doc/classes/CanvasItem.xml msgid "" @@ -16143,6 +16470,8 @@ msgid "" "Draws a [MultiMesh] in 2D with the provided texture. See " "[MultiMeshInstance2D] for related documentation." msgstr "" +"Dessine un [MultiMesh] en 2D avec la texture spécifiée. Voir " +"[MultiMeshInstance2D] pour la documentation en rapport." #: doc/classes/CanvasItem.xml msgid "" @@ -16381,6 +16710,8 @@ msgid "" "Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is " "in using the coordinate system of the [CanvasLayer]." msgstr "" +"Retourne la position de la souris dans le [CanvasLayer] que ce [CanvasItem] " +"utilise suivant le système de coordonnées du [CanvasLayer]." #: doc/classes/CanvasItem.xml msgid "Returns the global transform matrix of this item." @@ -16398,6 +16729,8 @@ msgid "" "Returns the mouse's position in this [CanvasItem] using the local coordinate " "system of this [CanvasItem]." msgstr "" +"Retourne la position de la souris dans le [CanvasItem] en utilisant le " +"système de coordonnées local au [CanvasItem]." #: doc/classes/CanvasItem.xml msgid "Returns the transform matrix of this item." @@ -16422,6 +16755,8 @@ msgid "" "Hide the [CanvasItem] if it's currently visible. This is equivalent to " "setting [member visible] to [code]false[/code]." msgstr "" +"Cacher les [CanvasItem] s'ils sont actuellement visibles. C'est équivalent à " +"[member visible] à [code]false[/code]." #: doc/classes/CanvasItem.xml msgid "" @@ -16436,6 +16771,8 @@ msgid "" "Returns [code]true[/code] if the node is set as top-level. See [method " "set_as_toplevel]." msgstr "" +"Retourne [code]true[/code] si le nÅ“ud est défini comme de niveau supérieur. " +"Voir [méthode set_as_toplevel]." #: doc/classes/CanvasItem.xml msgid "" @@ -16452,16 +16789,24 @@ msgid "" "also visible. If any antecedent is hidden, this node will not be visible in " "the scene tree." msgstr "" +"Retourne [code]true[/code] si le nÅ“ud est présent dans le [SceneTree], que " +"sa propriété [member visible] est [code]true[/code] et que tous ses parents " +"sont également visibles. Si un parent est caché, ce nÅ“ud ne sera pas visible " +"dans l'arborescence de la scène." #: doc/classes/CanvasItem.xml msgid "Assigns [code]screen_point[/code] as this node's new local transform." msgstr "" +"Assigne [code]screen_point[/code] comme la nouvelle position locale de ce " +"nÅ“ud." #: doc/classes/CanvasItem.xml msgid "" "Transformations issued by [code]event[/code]'s inputs are applied in local " "space instead of global space." msgstr "" +"Les transformations émises par les entrées de [code]event[/code] sont " +"appliquées dans l'espace local au lieu de l'espace global." #: doc/classes/CanvasItem.xml msgid "" @@ -16503,12 +16848,18 @@ msgid "" "[Popup], the correct way to make them visible is to call one of the multiple " "[code]popup*()[/code] functions instead." msgstr "" +"Affiche le [CanvasItem] s'il est actuellement caché. Ceci est équivalent à " +"[member visible] à [code]true[/code]. Pour les contrôles hérités de [Popup], " +"appelez plutôt l'une des fonctions [code]popup*()[/code] pour le rendre " +"visible." #: doc/classes/CanvasItem.xml msgid "" "Queue the [CanvasItem] for update. [constant NOTIFICATION_DRAW] will be " "called on idle time to request redraw." msgstr "" +"Ajoute le [CanvasItem] pour être mis à jour. [constant NOTIFICATION_DRAW] " +"sera émise sur le temps inoccupé pour demander la mise à jour." #: doc/classes/CanvasItem.xml msgid "" @@ -16543,6 +16894,8 @@ msgid "" "If [code]true[/code], the parent [CanvasItem]'s [member material] property " "is used as this one's material." msgstr "" +"Si [code]true[/code], la propriété [member material] du [CanvasItem] parent " +"est utilisée comme matériau de celui-ci." #: doc/classes/CanvasItem.xml msgid "" @@ -16553,12 +16906,21 @@ msgid "" "visible is to call one of the multiple [code]popup*()[/code] functions " "instead." msgstr "" +"Si [code]true[/code], ce [CanvasItem] est affiché. Le nÅ“ud n'est visible que " +"si tous ses parents le sont également (en d'autres termes, [méthode " +"is_visible_in_tree] doit retourner [code]true[/code]).\n" +"[b]Note :[/b] Pour les contrôles qui héritent de [Popup], la bonne manière " +"de les rendre visible est plutôt d'appeler l'une des fonctions [code]popup*()" +"[/code]." #: doc/classes/CanvasItem.xml msgid "" "Emitted when the [CanvasItem] must redraw. This can only be connected " "realtime, as deferred will not allow drawing." msgstr "" +"Émis lorsque le [CanvasItem] doit être redessiné. Ça ne peut être que " +"connecté qu'en temps réel, puisque le différer peut ne pas permettre le " +"dessin." #: doc/classes/CanvasItem.xml msgid "Emitted when becoming hidden." @@ -16570,6 +16932,9 @@ msgid "" "or when an action is taking place that may have impacted these boundaries (e." "g. changing [member Sprite.texture])." msgstr "" +"Émis quand la position ou la taille du [Rect2] a changé, ou lorsqu'une " +"action a changé ces valeurs là (par exemple en changeant [member Sprite." +"texture])" #: doc/classes/CanvasItem.xml msgid "Emitted when the visibility (hidden/visible) changes." @@ -16708,6 +17073,7 @@ msgid "" "Render the material using both light and non-light sensitive material " "properties." msgstr "" +"Fait le rendu du matériau avec et sans lumière des propriétés matérielles." #: doc/classes/CanvasItemMaterial.xml msgid "Render the material as if there were no light." @@ -16751,18 +17117,24 @@ msgid "" "Hides any [CanvasItem] under this [CanvasLayer]. This is equivalent to " "setting [member visible] to [code]false[/code]." msgstr "" +"Masque tous les [CanvasItem] dans ce [CanvasLayer]. Ceci est équivalent à " +"définir [member visible] à [code]false[/code]." #: doc/classes/CanvasLayer.xml msgid "" "Shows any [CanvasItem] under this [CanvasLayer]. This is equivalent to " "setting [member visible] to [code]true[/code]." msgstr "" +"Affiche tous les [CanvasItem] dans ce [CanvasLayer]. Ceci est équivalent à " +"définir [member visible] à [code]true[/code]." #: doc/classes/CanvasLayer.xml msgid "" "The custom [Viewport] node assigned to the [CanvasLayer]. If [code]null[/" "code], uses the default viewport instead." msgstr "" +"Le nÅ“ud [Viewport] personnalisé assigné au [CanvasLayer]. Si [code]null[/" +"code], ça utilise la fenêtre d'affichage par défaut à la place." #: doc/classes/CanvasLayer.xml msgid "" @@ -16776,6 +17148,10 @@ msgid "" "into the foreground should have increasing scales, while layers moving into " "the background should have decreasing scales." msgstr "" +"Change la mise à l'échelle du calque en utilisant [member " +"follow_viewport_enable]. Les calques se déplaçant au premier plan devraient " +"avoir des mises à l'échelle croissantes, tandis que les calques se déplaçant " +"dans le fond devraient avoir des mises à l'échelle décroissantes." #: doc/classes/CanvasLayer.xml msgid "Layer index for draw order. Lower values are drawn first." @@ -16810,6 +17186,10 @@ msgid "" "Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't " "propagated to underlying layers." msgstr "" +"Si [code]false[/code], tous les [CanvasItem] dans ce [CanvasLayer] sont " +"cachés.\n" +"Contrairement à [member CanvasItem.visible], la visibilité d'un " +"[CanvasLayer] n'est pas propagée aux calques enfants." #: doc/classes/CanvasLayer.xml #, fuzzy @@ -16842,6 +17222,10 @@ msgid "" "[b]Note:[/b] The capsule's total height is equal to [member mid_height] + 2 " "* [member radius]." msgstr "" +"La hauteur de la partie du cylindrique au milieu de la capsule (donc sans " +"les bouts hémisphériques).\n" +"[b]Note :[/b] La hauteur totale de la capsule est égale à [member " +"mid_height] + 2 * [member radius]." #: doc/classes/CapsuleMesh.xml msgid "Number of radial segments on the capsule mesh." @@ -16880,12 +17264,16 @@ msgid "" "CenterContainer keeps children controls centered. This container keeps all " "children to their minimum size, in the center." msgstr "" +"CenterContainer garde centrés les contrôles enfants. Ce conteneur garde tous " +"les enfants à leur taille minimale, dans son centre." #: doc/classes/CenterContainer.xml msgid "" "If [code]true[/code], centers children relative to the [CenterContainer]'s " "top left corner." msgstr "" +"Si [code]true[/code], centre les enfants par rapport au coin supérieur " +"gauche du [CenterContainer])." #: doc/classes/CharFXTransform.xml msgid "" @@ -17190,6 +17578,9 @@ msgid "" "normal text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"La couleur du texte du [CheckButton] quand il a le focus. Ne remplace que la " +"couleur de texte normale du bouton. Les états désactivés, survolé et pressés " +"sont prioritaire sur cette couleur." #: doc/classes/CheckButton.xml msgid "The [CheckButton] text's font color when it's hovered." @@ -17209,10 +17600,12 @@ msgstr "La couleur de la police du texte du [CheckButton] quand il est appuyé." #: doc/classes/CheckButton.xml msgid "The vertical offset used when rendering the toggle icons (in pixels)." msgstr "" +"Le décalage vertical utilisé lors du rendu des icônes de basculement (en " +"pixels)." #: doc/classes/CheckButton.xml msgid "The separation between the toggle icon and the text (in pixels)." -msgstr "" +msgstr "La séparation entre l'icône de basculement et le texte (en pixels)." #: doc/classes/CheckButton.xml msgid "The [Font] to use for the [CheckButton] text." @@ -17258,6 +17651,8 @@ msgid "" "The [StyleBox] to display as a background when the [CheckButton] is hovered " "and pressed." msgstr "" +"La [StyleBox] à afficher en fond lorsque le [CheckButton] est survolé et " +"appuyé." #: doc/classes/CheckButton.xml msgid "" @@ -17276,6 +17671,9 @@ msgid "" "small characters and its collision detection with everything else is very " "fast." msgstr "" +"Forme circulaire pour les collisions 2D. Cette forme est utile pour " +"modéliser les boules ou les petits caractères et sa détection des collisions " +"avec les autres éléments est très rapide." #: doc/classes/CircleShape2D.xml msgid "The circle's radius." @@ -17295,6 +17693,8 @@ msgid "" "Returns [code]true[/code] if you can instance objects from the specified " "[code]class[/code], [code]false[/code] in other case." msgstr "" +"Retourne [code]true[/code] si vous pouvez instancer des objets à partir de " +"[code]class[/code], [code]false[/code] dans un autre cas." #: doc/classes/ClassDB.xml msgid "Returns whether the specified [code]class[/code] is available or not." @@ -17305,12 +17705,17 @@ msgid "" "Returns a category associated with the class for use in documentation and " "the Asset Library. Debug mode required." msgstr "" +"Retourne une catégorie associée à la classe à utiliser dans la documentation " +"et la bibliothèque de ressources. Le mode débogage est nécessaire pour " +"récupérer cette information." #: doc/classes/ClassDB.xml msgid "" "Returns an array with all the keys in [code]enum[/code] of [code]class[/" "code] or its ancestry." msgstr "" +"Retourne un tableau avec toutes les clés dans l'énumeration [code]enum[/" +"code] de la [code]class[/code] ou de ses parents." #: doc/classes/ClassDB.xml #, fuzzy @@ -17335,6 +17740,8 @@ msgid "" "Returns an array with the names all the integer constants of [code]class[/" "code] or its ancestry." msgstr "" +"Retourne un tableau avec le nom de toutes les constantes entières de " +"[code]class[/code] ou de son parent." #: doc/classes/ClassDB.xml msgid "" @@ -17347,6 +17754,15 @@ msgid "" "[b]Note:[/b] In exported release builds the debug info is not available, so " "the returned dictionaries will contain only method names." msgstr "" +"Retourne un tableau avec toutes les méthodes de [code]class[/code] ou son " +"parent si [code]no_inheritance[/code] est [code]false[/code]. Chaque élément " +"du tableau est un [Dictionary] avec les clés suivantes : [code]args[/code], " +"[code]default_args[/code], [code]flags[/code], [code]id[/code], [code]name[/" +"code] et [code]return: (class_name, hint, hint_string, name, type, usage)[/" +"code].\n" +"[b]Note :[/b] Dans la version exportée, les informations de débogage ne sont " +"pas disponibles, les dictionnaires retournés ne contiendront donc que le nom " +"des méthodes." #: doc/classes/ClassDB.xml msgid "" @@ -17361,6 +17777,8 @@ msgid "" "Returns an array with all the properties of [code]class[/code] or its " "ancestry if [code]no_inheritance[/code] is [code]false[/code]." msgstr "" +"Retourne un tableau avec toutes les propriétés de [code]class[/code] ou de " +"son parent si [code]no_inheritance[/code] est [code]false[/code]." #: doc/classes/ClassDB.xml msgid "" @@ -17370,6 +17788,11 @@ msgid "" "[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, " "usage)[/code]." msgstr "" +"Retourne les données [code]signal[/code] de [code]class[/code] ou de son " +"parent. La valeur retournée est un [Dictionary] avec les clés suivantes : " +"[code]args[/code], [code]default_args[/code], [code]flags[/code], [code]id[/" +"code], [code]name[/code] et [code]return: (class_name, hint, hint_string, " +"name, type, usage)[/code]." #: doc/classes/ClassDB.xml msgid "" @@ -17377,6 +17800,9 @@ msgid "" "if [code]no_inheritance[/code] is [code]false[/code]. Every element of the " "array is a [Dictionary] as described in [method class_get_signal]." msgstr "" +"Retourne un tableau avec tous les signaux de [code]class[/code] ou son " +"parent si [code]no_inheritance[/code] est [code]false[/code]. Chaque élément " +"du tableau est un [Dictionary] comme détaillé dans [method class_get_signal]." #: doc/classes/ClassDB.xml msgid "" @@ -17391,6 +17817,8 @@ msgid "" "Returns whether [code]class[/code] or its ancestry has an integer constant " "called [code]name[/code] or not." msgstr "" +"Retourne si [code]class[/code] ou son parent a une constante entière appelée " +"[code]name[/code] ou non." #: doc/classes/ClassDB.xml msgid "" @@ -17483,6 +17911,8 @@ msgid "" "Returns [code]true[/code] if the specified bit index is on.\n" "[b]Note:[/b] Bit indices range from 0-19." msgstr "" +"Retourne [code]true[/code] si l'index de bit spécifié est actif.\n" +"[b]Note :[/b] Les indices de bit vont de 0 à 19." #: doc/classes/ClippedCamera.xml msgid "Removes a collision exception with the specified node." @@ -17497,6 +17927,8 @@ msgid "" "Sets the specified bit index to the [code]value[/code].\n" "[b]Note:[/b] Bit indices range from 0-19." msgstr "" +"Définit l'index de bit spécifié à [code]valeur[/code].\n" +"[b]Note :[/b] Les indices des bit vont de 0 à 19." #: doc/classes/ClippedCamera.xml msgid "If [code]true[/code], the camera stops on contact with [Area]s." @@ -17516,6 +17948,11 @@ msgid "" "physics_introduction.html#collision-layers-and-masks]Collision layers and " "masks[/url] in the documentation for more information." msgstr "" +"Le masque de collision de la caméra. Seuls les objets dans au moins une " +"calque de collision correspondant au masque seront détectés. Voir " +"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-" +"and-masks]Calques et masques de collision[/url] dans la documentation pour " +"plus d'informations." #: doc/classes/ClippedCamera.xml msgid "" @@ -17541,6 +17978,13 @@ 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 est la classe de base pour les objets physiques. Il peut " +"contenir n'importe quel nombre de formes [Shape] de collision. Chaque forme " +"doit être assignée à un [i]propriétaire de forme[ /i]. Le CollisionObject " +"peut avoir n'importe quel nombre de propriétaires de forme. Les " +"propriétaires de forme ne sont pas des nÅ“uds et ne apparaissent pas dans " +"l'éditeur, mais sont accessibles par le code en utilisant les méthodes " +"[code]shape_owner_*[/code]." #: doc/classes/CollisionObject.xml msgid "" @@ -17550,6 +17994,11 @@ msgid "" "surface at that point. Connect to the [signal input_event] signal to easily " "pick up these events." msgstr "" +"Reçoie les [InputEvent] non traités. [code]position[/code] est la position " +"dans l'espace global du curseur de la souris sur la surface de la forme avec " +"index [code]shape_idx[/code] et [code]normal[/code] est le vecteur de " +"normale de la surface à ce point. Connectez-vous au signal [signal " +"input_event] pour récupérer facilement ces événements." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "" @@ -18001,6 +18450,13 @@ msgid "" "only helper to create shapes, use [method CollisionObject." "shape_owner_get_shape] to get the actual shape." msgstr "" +"Un élément d'aide de l'éditeur pour créer et modifier des formes de " +"collision dans l'espace 3D. Vous pouvez utiliser ce nÅ“ud pour représenter " +"toutes sortes de formes de collision, par exemple, ajoutez-le à un [Area] " +"pour lui donner une forme de détection, ou l'ajoutez-le à un [PhysicsBody] " +"pour créer un objet solide. [b]IMPORTANT[/b] : c'est une aide de l'éditeur " +"qui ne sert qu'à créer des formes, utiliser [method CollisionObject." +"shape_owner_get_shape] pour obtenir la forme réelle." #: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml #: doc/classes/Physics2DDirectBodyState.xml @@ -18048,6 +18504,13 @@ msgid "" "Editor-only helper to create shapes, use [method CollisionObject2D." "shape_owner_get_shape] to get the actual shape." msgstr "" +"Un élément d'aide de l'éditeur pour créer et modifier des formes de " +"collision dans l'espace 2D. Vous pouvez utiliser ce nÅ“ud pour représenter " +"toutes sortes de formes de collision, par exemple, ajoutez-le à un [Area] " +"pour lui donner une forme de détection, ou l'ajoutez-le à un [PhysicsBody] " +"pour créer un objet solide. [b]IMPORTANT[/b] : c'est une aide de l'éditeur " +"qui ne sert qu'à créer des formes, utiliser [method CollisionObject." +"shape_owner_get_shape] pour obtenir la forme réelle." #: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml #: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml @@ -18245,6 +18708,12 @@ msgid "" "var darkgreen = green.darkened(0.2) # 20% darker than regular green\n" "[/codeblock]" msgstr "" +"Retourne une nouvelle couleur à partir de cette couleur en plus foncée par " +"le pourcentage donné (de 0 à 1).\n" +"[codeblock]\n" +"var green = Couleur(0.0, 1.0, 0.0) # Vert vif\n" +"var darkgreen = vert.darkened(0.2) # 20% plus foncé que le vert vif\n" +"/[codeblock]" #: doc/classes/Color.xml msgid "" @@ -18268,6 +18737,11 @@ msgid "" "This is useful when determining light or dark color. Colors with a luminance " "smaller than 0.5 can be generally considered dark." msgstr "" +"Retourne la luminosité de la couleur dans l'intervalle [code][0.0, 1.0][/" +"code].\n" +"Ceci est utile pour déterminer si c'est une couleur claire ou foncée. Les " +"couleurs avec une luminosité inférieure à 0,5 peuvent généralement être " +"considérées comme sombres." #: doc/classes/Color.xml msgid "" @@ -18428,7 +18902,7 @@ msgid "" "[/codeblock]" msgstr "" "Retourne la chaîne de caractères avec le code hexadécimal façon HTML au " -"format ARGB (par exemple [code]ff34f822[/code)].\n" +"format ARGB (par exemple [code]ff34f822[/code]).\n" "Définir [code]with_alpha[/code] à [code]false[/code] ne retourne pas la " "valeur alpha dans le code hexadécimal retourné.\n" "[codeblock]\n" @@ -18862,7 +19336,7 @@ msgstr "Couleur marron." #: doc/classes/Color.xml #, fuzzy msgid "Medium aquamarine color." -msgstr "Couleur bleu-marin moyenne." +msgstr "Couleur bleu-marine moyenne." #: doc/classes/Color.xml msgid "Medium blue color." @@ -19089,22 +19563,18 @@ msgid "Violet color." msgstr "Couleur violette." #: doc/classes/Color.xml -#, fuzzy msgid "Web gray color." msgstr "Couleur gris Web." #: doc/classes/Color.xml -#, fuzzy msgid "Web green color." -msgstr "Couleur verte web." +msgstr "Couleur vert Web." #: doc/classes/Color.xml -#, fuzzy msgid "Web maroon color." msgstr "Couleur marron Web." #: doc/classes/Color.xml -#, fuzzy msgid "Web purple color." msgstr "Couleur violet Web." @@ -19271,6 +19741,13 @@ msgid "" "preview swatch to be visible. Make sure to set [member Control." "rect_min_size] to a big enough value to give the button enough space." msgstr "" +"Encapsule un [ColorPicker] le rendant accessible en appuyant sur un bouton. " +"En appuyant sur le bouton, le [ColorPicker] deviendra visible.\n" +"Voir aussi [BaseButton] qui contient des propriétés et des méthodes communes " +"associées à ce nÅ“ud.\n" +"[b]Note :[/b] Par défaut, le bouton peut ne pas être assez large pour que " +"les palettes de couleur soit visibles. Assurez-vous de configurer [member " +"Control.rect_min_size] avec une taille suffisante grande pour le bouton." #: doc/classes/ColorPickerButton.xml msgid "" @@ -19279,6 +19756,10 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"Retourne le [ColorPicker] que ce nÅ“ud bascule.\n" +"[b]Avertissement :[/b] Il s'agit d'un nÅ“ud interne requis, le retirer et le " +"supprimer peut causer un plantage. Si vous voulez le cacher ou l'un de ses " +"enfants, utilisez la propriété [member CanvasItem.visible]." #: doc/classes/ColorPickerButton.xml msgid "" @@ -19289,6 +19770,12 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"Retourne la commande suivante [PopupPanel] qui vous permet de vous connecter " +"aux signaux de la fenêtre surgissante. Cela vous permet de gérer les " +"événements lorsque le ColorPicker est affiché ou caché.\n" +"[b]Avertissement :[/b] Il s'agit d'un nÅ“ud interne requis, le retirer et le " +"supprimer peut causer un plantage. Si vous voulez le cacher ou l'un de ses " +"enfants, utilisez la propriété [member CanvasItem.visible]." #: doc/classes/ColorPickerButton.xml msgid "" @@ -19306,6 +19793,8 @@ msgid "" "Emitted when the [ColorPicker] is created (the button is pressed for the " "first time)." msgstr "" +"Émis lorsque le [ColorPicker] est créé (le bouton est pressé pour la " +"première fois)." #: doc/classes/ColorPickerButton.xml msgid "Emitted when the [ColorPicker] is closed." @@ -19326,6 +19815,9 @@ msgid "" "normal text color of the button. Disabled, hovered, and pressed states take " "precedence over this color." msgstr "" +"La [Color] du texte utilisée lorsque le [ColorPickerButton] a le focus. Il " +"suffit de remplacer la couleur de texte normale du bouton. Les états " +"désactivé, survolé et pressé sont prioritaires par rapport à cette couleur." #: doc/classes/ColorPickerButton.xml msgid "Text [Color] used when the [ColorPickerButton] is being hovered." @@ -19358,6 +19850,9 @@ msgid "" "over the current [StyleBox], so using [StyleBoxEmpty] will just disable the " "focus visual effect." msgstr "" +"La [StyleBox] utilisée lorsque le [ColorPickerButton] a le focus. Il est " +"affiché par dessus la [StyleBox] actuelle, donc utiliser [StyleBoxEmpty] ne " +"fera que désactiver l'effet visuel de focus." #: doc/classes/ColorPickerButton.xml msgid "[StyleBox] used when the [ColorPickerButton] is being hovered." @@ -19380,6 +19875,8 @@ msgid "" "Displays a rectangle filled with a solid [member color]. If you need to " "display the border alone, consider using [ReferenceRect] instead." msgstr "" +"Affiche un rectangle rempli de la couleur [member color]. Si vous devez " +"seulement afficher la bordure, utilisez plutôt un [ReferenceRect]." #: doc/classes/ColorRect.xml msgid "" @@ -19406,6 +19903,13 @@ msgid "" "work with static [PhysicsBody] nodes like [StaticBody] and will not work " "with [KinematicBody] or [RigidBody] with a mode other than Static." msgstr "" +"Une ressource en forme de polygone concave, qui peut être utilisée dans un " +"[PhysicsBody] ou une aire. Cette forme est créée à partir d'une liste de " +"triangles.\n" +"[b]Note :[/b] Lorsque qu'elle est utilisée pour les collisions, " +"[ConcavePolygonShape] ne fonctionnera qu'avec les nÅ“uds statiques " +"[PhysicsBody] comme les [StaticBody] et non pas avec [KinematicBody] ou " +"[RigidBody] quand ils ne sont pas en mode Static." #: doc/classes/ConcavePolygonShape.xml msgid "Returns the faces (an array of triangles)." @@ -19432,6 +19936,18 @@ msgid "" "uses a more complex method of collision detection, and a convex one forces " "itself to be convex in order to speed up collision detection." msgstr "" +"Une ressource en forme de polygone concave pour la physique 2D. Elle est " +"composée de segments et est optimal pour les collisions complexes de " +"concaves polygonales. Cependant, il n'est pas conseillé de l'utiliser pour " +"les nÅ“uds [RigidBody2D]. Un CollisionPolygon2D décomposé en convexes " +"(solides) ou plusieurs objets convexes sont conseillés dans ce cas. Sinon, " +"une forme en polygone concave 2D est préférable pour les collisions " +"statiques.\n" +"La principale différence entre un [ConvexPolygonShape2D] et un " +"[ConcavePolygonShape2D] est qu'un polygone concave suppose qu'il contient " +"des zones creusées à l'intérieur et doit utiliser une méthode plus complexe " +"pour détecter les collisions, alors qu'un polygone convexe n'admet aucune " +"zone creusée pour pouvoir accélérer la détection des collisions." #: doc/classes/ConcavePolygonShape2D.xml msgid "" @@ -19702,6 +20218,11 @@ msgid "" "loaded in the [ConfigFile] object which the method was called on.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Charge le fichier de configuration crypté spécifié comme paramètre, en " +"utilisant le mode de passe [code]password[/code] donné pour le décrypter. Le " +"contenu du fichier est interprété puis chargé dans l'objet [ConfigFile] sur " +"lequel la méthode a été appelée.\n" +"Retourne un des codes [enum Error] ([code]OK[/code] si c'est un succès)." #: doc/classes/ConfigFile.xml msgid "" @@ -19709,6 +20230,10 @@ msgid "" "parsed and loaded in the ConfigFile object which the method was called on.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Interprète la chaîne passée comme étant le contenu d'un fichier de " +"configuration. La chaîne est interprétée puis chargée dans l'objet " +"ConfigFile sur lequel la méthode a été appelée.\n" +"Retourne un des codes [enum Error] ([code]OK[/code] si c'est un succès)." #: doc/classes/ConfigFile.xml msgid "" @@ -19716,6 +20241,9 @@ msgid "" "parameter. The output file uses an INI-style structure.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Enregistre le contenu de l'objet [ConfigFile] au fichier spécifié en " +"paramètre. Le fichier de sortie utilise une structure de type INI.\n" +"Retourne un des codes [enum Error] ([code]OK[/code] si c'est un succès)." #: doc/classes/ConfigFile.xml msgid "" @@ -20413,6 +20941,10 @@ msgid "" "[member focus_neighbour_left], [member focus_neighbour_right] and [member " "focus_neighbour_top]." msgstr "" +"Retourne le voisin de focus identifié par la constante [code]margin[/code] " +"de l'énumération [enum Margin]. Une méthode de getter pour [member " +"focus_neighbour_bottom], [member focus_neighbour_left], [member " +"focus_neighbour_right] et [member focus_neighbour_top]." #: doc/classes/Control.xml msgid "" @@ -20427,12 +20959,18 @@ msgid "" "code].\n" "See [method get_color] for details." msgstr "" +"Retourne une [Font] du premier [Theme] correspondant dans l'arborescence si " +"ce [Theme] a une propriété de police nommée [code]name[/code] et du type de " +"thème [code]theme_type[/code].\n" +"Voir [method get_color] pour plus de détails." #: doc/classes/Control.xml msgid "" "Returns the position and size of the control relative to the top-left corner " "of the screen. See [member rect_position] and [member rect_size]." msgstr "" +"Retourne la position et la taille du contrôle par rapport au coin supérieur " +"gauche de l'écran. Voir [member rect_position] et [member rect_size]." #: doc/classes/Control.xml msgid "" @@ -20441,6 +20979,10 @@ msgid "" "code].\n" "See [method get_color] for details." msgstr "" +"Retourne une icône du premier [Theme] correspondant dans l'arborescence si " +"ce [Theme] a une propriété d'icône nommée [code]name[/code] et du type de " +"thème [code]theme_type[/code].\n" +"Voir [method get_color] pour plus de détails." #: doc/classes/Control.xml msgid "" @@ -20448,6 +20990,10 @@ msgid "" "Margin] enum. A getter method for [member margin_bottom], [member " "margin_left], [member margin_right] and [member margin_top]." msgstr "" +"Retourne l'ancre identifiée par la constante [code]margin[/code] de " +"l'énumeration [enum Margin]. Une méthode de getter pour [member " +"margin_bottom], [member margin_left], [member margin_right] et [member " +"margin_top]." #: doc/classes/Control.xml msgid "Returns the minimum size for this control. See [member rect_min_size]." @@ -20468,6 +21014,8 @@ msgid "" "Returns the position and size of the control relative to the top-left corner " "of the parent Control. See [member rect_position] and [member rect_size]." msgstr "" +"Retourne la position et la taille du contrôle par rapport au coin supérieur " +"gauche du contrôle parent. Voir [member rect_position] et [member rect_size]." #: doc/classes/Control.xml msgid "Returns the rotation (in radians)." @@ -20480,6 +21028,10 @@ msgid "" "[code]theme_type[/code].\n" "See [method get_color] for details." msgstr "" +"Retourne une [StyleBox] du premier [Theme] correspondant dans l'arborescence " +"si ce [Theme] a une propriété de boîte de style nommée [code]name[/code] et " +"du type de thème [code]theme_type[/code].\n" +"Voir [method get_color] pour plus de détails." #: doc/classes/Control.xml msgid "" @@ -20506,6 +21058,13 @@ msgid "" "be clicked instead\n" "[/codeblock]" msgstr "" +"Crée un [InputEventMouseButton] qui tente de cliquer sur le contrôle. Si " +"l'événement est bien reçu, le contrôle prend le focus.\n" +"[codeblock]\n" +"func _process(delta:)\n" +" grab_click_focus() # Lorsque vous cliquez sur un autre contrôle, ce nÅ“ud " +"sera cliqué à la place\n" +"/[codeblock]" #: doc/classes/Control.xml msgid "" @@ -20522,6 +21081,10 @@ msgid "" "code].\n" "See [method get_color] for details." msgstr "" +"Retourne [code]true[/code] s'il y a un [Theme] correspondant dans " +"l'arborescence qui a une propriété de couleur nommé [code]name[/code] et du " +"type de thème [code]theme_type[/code].\n" +"Voir [method get_color] pour plus de détails." #: doc/classes/Control.xml msgid "" @@ -20540,6 +21103,10 @@ msgid "" "[code]theme_type[/code].\n" "See [method get_color] for details." msgstr "" +"Retourne [code]true[/code] s'il y a un [Theme] correspondant dans " +"l'arborescence qui a une propriété de constante nommée [/code]name[/code] et " +"du type de thème [code]theme_type[/code].\n" +"Voir [method get_color] pour plus de détails." #: doc/classes/Control.xml msgid "" @@ -20612,6 +21179,12 @@ msgid "" "[b]Note:[/b] If you want to check if a point is inside the control, you can " "use [code]get_rect().has_point(point)[/code]." msgstr "" +"Une méthode virtuelle à implémenter par l'utilisateur. Retourne si le " +"[code]point[/code] donné est à l'intérieur de ce contrôle.\n" +"Si ce n'est pas le cas, le comportement par défaut vérifie si le point se " +"trouve dans le rectant englobant du contrôle.\n" +"[b]Note :[/b] Si vous voulez vérifier si un point est à l'intérieur du " +"contrôle, vous pouvez utiliser [code]get_rect().has_point(point[/code]." #: doc/classes/Control.xml msgid "" @@ -20746,6 +21319,11 @@ msgid "" "If [code]keep_margins[/code] is [code]true[/code], control's position will " "also be updated." msgstr "" +"Définit les ancres avec le préréglage [code]preset[/code] de l'énumeration " +"[enum Control.LayoutPreset]. C'est le code équivalent à l'utilisation du " +"menu \"Mise en page\" dans l'éditeur 2D.\n" +"Si [code]keep_margins[/code] est [code]true[/code], la position du contrôle " +"sera également mise à jour." #: doc/classes/Control.xml msgid "" @@ -20883,6 +21461,10 @@ msgid "" "margin_bottom], [member margin_left], [member margin_right] and [member " "margin_top]." msgstr "" +"Régle la marge identifiée par la constante [code]margin[/code] de " +"l'énumeration [enum Margin] à [code]offset[/code]. Une méthode de setter " +"pour [member margin_bottom], [member margin_left], [member margin_right] et " +"[member margin_top]." #: doc/classes/Control.xml msgid "" @@ -20896,6 +21478,16 @@ msgid "" "Use parameter [code]margin[/code] to determine the gap between the [Control] " "and the edges." msgstr "" +"Définit les marges avec le préréglage [code]preset[/code] de l'énumeration " +"[enum Control.LayoutPreset]. C'est le code équivalent à l'utilisation du " +"menu Layout dans l'éditeur 2D.\n" +"Utilisez le paramètre [code]resize_mode[/code] avec des constantes de [enum " +"Control.LayoutPresetMode] pour mieux déterminer la taille résultante du " +"[Control]. La taille constante sera ignorée si elle est utilisée avec des " +"préréglages qui changent la taille, par exemple [code]PRESET_LEFT_WIDE[/" +"code].\n" +"Utiliser le paramètre [code]margin[/code] pour déterminer l'écart entre le " +"[Contrôle] et les bords." #: doc/classes/Control.xml msgid "" @@ -20903,6 +21495,9 @@ msgid "" "If [code]keep_margins[/code] is [code]true[/code], control's anchors will be " "updated instead of margins." msgstr "" +"Défini le [member rect_position] à la [code]position[/code] spécifiée.\n" +"Si [code]keep_margins[/code] est [code]true[/code], les ancres du contrôle " +"sont mis à jour au lieu des marges." #: doc/classes/Control.xml msgid "Sets the rotation (in radians)." @@ -20914,6 +21509,9 @@ msgid "" "If [code]keep_margins[/code] is [code]true[/code], control's anchors will be " "updated instead of margins." msgstr "" +"Définit la taille (voir [member rect_size]).\n" +"Si [code]keep_margins[/code] est [code]true[/code], les ancres du contrôle " +"sont mis à jour au lieu des marges." #: doc/classes/Control.xml msgid "" @@ -20941,6 +21539,10 @@ msgid "" "moves or changes size. You can use one of the [enum Anchor] constants for " "convenience." msgstr "" +"L'ancre du bord du bas du nÅ“ud par rapport à l'origine, le centre, ou la fin " +"de son contrôle parent. Il modifie la mise à jour de la marge inférieure " +"lorsque le nÅ“ud se déplace ou change la taille. Vous pouvez utiliser une des " +"constantes de [enum Anchor] suivant les besoins." #: doc/classes/Control.xml msgid "" @@ -20949,6 +21551,10 @@ msgid "" "moves or changes size. You can use one of the [enum Anchor] constants for " "convenience." msgstr "" +"L'ancre du bord gauche du nÅ“ud par rapport à l'origine, le centre ou la fin " +"de son contrôle parent. Il modifie la mise à jour de la marge gauche lorsque " +"le nÅ“ud se déplace ou change la taille. Vous pouvez utiliser une des " +"constantes de [enum Anchor] suivant les besoins." #: doc/classes/Control.xml msgid "" @@ -20957,6 +21563,10 @@ msgid "" "moves or changes size. You can use one of the [enum Anchor] constants for " "convenience." msgstr "" +"L'ancre du bord droit du nÅ“ud par rapport à l'origine, le centre ou la fin " +"de son contrôle parent. Il modifie la mise à jour de la marge droite lorsque " +"le nÅ“ud se déplace ou change la taille. Vous pouvez utiliser une des " +"constantes de [enum Anchor] suivant les besoins." #: doc/classes/Control.xml msgid "" @@ -20964,6 +21574,10 @@ msgid "" "parent control. It changes how the top margin updates when the node moves or " "changes size. You can use one of the [enum Anchor] constants for convenience." msgstr "" +"L'ancre du bord du haut du nÅ“ud par rapport à l'origine, le centre ou la fin " +"de son contrôle parent. Il modifie la mise à jour de la marge supérieure " +"lorsque le nÅ“ud se déplace ou change la taille. Vous pouvez utiliser une des " +"constantes de [enum Anchor] suivant les besoins." #: doc/classes/Control.xml msgid "" @@ -21065,6 +21679,10 @@ msgid "" "grow if its horizontal minimum size is changed to be greater than its " "current size, as the control always has to be at least the minimum size." msgstr "" +"Control la direction sur l'axe horizontal selon lequel le contrôle doit " +"croître si sa taille minimale horizontale est modifiée pour être supérieure " +"à sa taille actuelle, car le contrôle doit toujours avoir au moins sa taille " +"minimale." #: doc/classes/Control.xml msgid "" @@ -21072,6 +21690,10 @@ msgid "" "if its vertical minimum size is changed to be greater than its current size, " "as the control always has to be at least the minimum size." msgstr "" +"Control la direction sur l'axe vertical selon lequel le contrôle doit " +"croître si sa taille minimale verticale est changée pour être supérieure à " +"sa taille actuelle, car le contrôle doit toujours avoir au moins sa taille " +"minimale." #: doc/classes/Control.xml msgid "" @@ -21124,6 +21746,11 @@ msgid "" "handling. The viewport first hides the modal and after marks the input as " "handled." msgstr "" +"Active quand l'entrée doit se propager lorsque vous fermez le contrôle en " +"tant que modale.\n" +"Si [code]false[/code], arrête le traitement de l'événement lors de la " +"manipulation de l'événement d'entrée de la fenêtre d'affichage. La fenêtre " +"d'affichage cache d'abord la modale et après marque l'entrée comme traitée." #: doc/classes/Control.xml msgid "" @@ -21217,12 +21844,18 @@ msgid "" "to this control's rectangle. If [code]true[/code], parts of a child which " "would be visibly outside of this control's rectangle will not be rendered." msgstr "" +"Active quand le rendu des [CanvasItem] enfants doit être limité au rectangle " +"engobant de ce contrôle. Si [code]true[/code], des parties des enfants qui " +"seraient normalement visibles en-dehors de ce rectangle des contrôles seront " +"cachées." #: doc/classes/Control.xml msgid "" "The node's global position, relative to the world (usually to the top-left " "corner of the window)." msgstr "" +"La position globale du nÅ“ud, par rapport au coordonnées globales " +"(généralement au coin haut-gauche de la fenêtre)." #: doc/classes/Control.xml msgid "" @@ -21231,6 +21864,11 @@ msgid "" "this size, even if its content is smaller. If it's set to (0, 0), the node " "sizes automatically to fit its content, be it a texture or child nodes." msgstr "" +"La taille minimale du rectangle englobant. Si vous le fixez à une valeur " +"supérieure à (0, 0), le rectangle englobant du nÅ“ud aura toujours au moins " +"cette taille, même si son contenu est plus petit. Si cette taille est à (0, " +"0), le nÅ“ud sera redimensionné automatiquement pour s'adapter à son contenu, " +"qu'il s'agisse d'une texture ou d'un nÅ“ud enfant." #: doc/classes/Control.xml msgid "" @@ -21239,6 +21877,10 @@ msgid "" "around this pivot. Set this property to [member rect_size] / 2 to pivot " "around the Control's center." msgstr "" +"Par défaut, et le pivot du nÅ“ud est son coin supérieur gauche. Lorsque vous " +"modifiez son [member rect_rotation] ou [member rect_scale], il tournera ou " +"changera d'échelle autour de ce pivot. Définir cette propriété à [member " +"rect_size] / 2 permet de pivoter autour du centre du contrôle." #: doc/classes/Control.xml msgid "" @@ -21246,12 +21888,17 @@ msgid "" "rectangle's top-left corner. The property is not affected by [member " "rect_pivot_offset]." msgstr "" +"La position du nÅ“ud, par rapport à son parent. Elle correspond au coin " +"supérieur gauche du rectangle. La propriété n'est pas affectée par [member " +"rect_pivot_offset]." #: doc/classes/Control.xml msgid "" "The node's rotation around its pivot, in degrees. See [member " "rect_pivot_offset] to change the pivot's position." msgstr "" +"La rotation du nÅ“ud autour de son pivot, en degrés. Voir [member " +"rect_pivot_offset] pour modifier la position du pivot." #: doc/classes/Control.xml msgid "" @@ -21291,6 +21938,8 @@ msgid "" "The size of the node's bounding rectangle, in pixels. [Container] nodes " "update this property automatically." msgstr "" +"La taille du rectangle englobant du nÅ“ud, en pixels. Les nÅ“uds [Container] " +"mettent à jour cette propriété automatiquement." #: doc/classes/Control.xml msgid "" @@ -21298,6 +21947,9 @@ msgid "" "on the X axis. Use one of the [enum SizeFlags] constants to change the " "flags. See the constants to learn what each does." msgstr "" +"Signale au [Container] parent qu'il devrait redimensionner et placer le nÅ“ud " +"sur l'axe X. Utilisez l'une des constantes [enum SizeFlags] pour changer les " +"drapeaux. Voyez les constantes pour apprendre ce que chacun fait." #: doc/classes/Control.xml msgid "" @@ -21307,6 +21959,11 @@ msgid "" "its neighbour a ratio of 1, this node will take two thirds of the available " "space." msgstr "" +"Si le nÅ“ud et au moins un de ses voisins utilisent le drapeau de taille " +"[constant SIZE_EXPAND], le [Container] parent le laissera prendre plus ou " +"moins d'espace selon cette propriété. Si ce nÅ“ud a un rapport d'étirement de " +"2 et son voisin un rapport de 1, ce nÅ“ud prendra les deux tiers (deux fois " +"plus que l'autre) de l'espace disponible." #: doc/classes/Control.xml msgid "" @@ -21314,12 +21971,17 @@ msgid "" "on the Y axis. Use one of the [enum SizeFlags] constants to change the " "flags. See the constants to learn what each does." msgstr "" +"Signale au [Container] parent qu'il devrait redimensionner et placer le nÅ“ud " +"sur l'axe Y. Utilisez l'une des constantes [enum SizeFlags] pour changer les " +"drapeaux. Voyez les constantes pour apprendre ce que chacun fait." #: doc/classes/Control.xml msgid "" "Changing this property replaces the current [Theme] resource this node and " "all its [Control] children use." msgstr "" +"Changer cette propriété remplace la ressource [Theme] actuelle que ce nÅ“ud " +"et tous ses [Contrôle] enfants utilisent." #: doc/classes/Control.xml msgid "" @@ -21388,6 +22050,12 @@ msgid "" "at least until the mouse is moved to reach the parent's [code]Rect[/code] " "area." msgstr "" +"Émis lorsque la souris entre dans le [code]Rect[/code] du contrôle, à " +"condition que l'événement l'atteigne.\n" +"[b]Note :[/b] [signal mouse_entered] ne sera pas émis si la souris entre " +"dans un nÅ“ud [Control] enfant avant d'entrer dans le [code]Rect[/code], au " +"moins jusqu'à ce que la souris soit déplacée pour atteindre le [code]Rect[/" +"code] du parent." #: doc/classes/Control.xml msgid "" @@ -21428,6 +22096,8 @@ msgid "" "Emitted when one of the size flags changes. See [member " "size_flags_horizontal] and [member size_flags_vertical]." msgstr "" +"Émis lorsque l'un des drapeaux de taille change. Voir [member " +"size_flags_horizontal] et [member size_flags_vertical]." #: doc/classes/Control.xml msgid "The node cannot grab focus. Use with [member focus_mode]." @@ -21446,11 +22116,16 @@ 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 "" +"Le nÅ“ud peut obtenir le focus lors d'un clic de souris ou en utilisant les " +"flèches et la touche de tabulation du clavier. À utiliser avec [member " +"focus_mode]." #: doc/classes/Control.xml msgid "" "Sent when the node changes size. Use [member rect_size] to get the new size." msgstr "" +"Envoyé quand le nÅ“ud change de taille. Utilisez [member rect_size] pour " +"obtenir la nouvelle taille." #: doc/classes/Control.xml msgid "Sent when the mouse pointer enters the node." @@ -21474,28 +22149,38 @@ msgid "" "control. Happens when you call one of the [code]add_*_override[/code] " "methods." msgstr "" +"Envoyé lorsque le [member theme] du nÅ“ud change, juste avant que Godot ne " +"redessine le contrôle. Ça arrive quand vous appelez l'une des méthodes " +"[code]add_*_override[/code]." #: doc/classes/Control.xml msgid "Sent when an open modal dialog closes. See [method show_modal]." msgstr "" +"Envoyé quand un dialogue modal ouvert se ferme. Voir [method show_modal]." #: doc/classes/Control.xml msgid "" "Sent when this node is inside a [ScrollContainer] which has begun being " "scrolled." msgstr "" +"Envoyé quand ce nÅ“ud est à l'intérieur d'un [ScrollContainer] qui a commencé " +"à défilé." #: doc/classes/Control.xml msgid "" "Sent when this node is inside a [ScrollContainer] which has stopped being " "scrolled." msgstr "" +"Envoyé quand ce nÅ“ud est à l'intérieur d'un [ScrollContainer] qui a cessé de " +"défilé." #: doc/classes/Control.xml msgid "" "Show the system's arrow mouse cursor when the user hovers the node. Use with " "[member mouse_default_cursor_shape]." msgstr "" +"Affiche le curseur système de la souris quand l'utilisateur survole le nÅ“ud. " +"À utiliser avec [member mouse_default_cursor_shape]." #: doc/classes/Control.xml msgid "" @@ -21623,72 +22308,98 @@ msgid "" "Show the system's vertical split mouse cursor when the user hovers the node. " "On Windows, it's the same as [constant CURSOR_VSIZE]." msgstr "" +"Affiche le curseur système de la souris avec un séparateur vertical lorsque " +"l'utilisateur survole le nÅ“ud. Sur Windows, il est identique à [constant " +"CURSOR_VSIZE]." #: doc/classes/Control.xml msgid "" "Show the system's horizontal split mouse cursor when the user hovers the " "node. On Windows, it's the same as [constant CURSOR_HSIZE]." msgstr "" +"Affiche le curseur système de la souris avec un séparateur horizontal " +"lorsque l'utilisateur survole le nÅ“ud. Sur Windows, il est identique à " +"[constant CURSOR_HSIZE]." #: doc/classes/Control.xml msgid "" "Show the system's help mouse cursor when the user hovers the node, a " "question mark." msgstr "" +"Affiche le curseur système de la souris pour l'aide lorsque l'utilisateur " +"survole le nÅ“ud, avec un point d'interrogation." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the top-left of the parent control's bounds. Use with " "[method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres jusqu'au coin gauche supérieur du rectangle " +"englobant du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the top-right of the parent control's bounds. Use with " "[method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres jusqu'au coin droit du rectangle englobant du " +"contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the bottom-left of the parent control's bounds. Use " "with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres jusqu'au coin bas-gauche du rectangle " +"englobant du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the bottom-right of the parent control's bounds. Use " "with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres jusqu'au coin bas-droit du rectangle englobant " +"du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the center of the left edge of the parent control's " "bounds. Use with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres au centre du bord gauche du rectangle " +"englobant du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the center of the top edge of the parent control's " "bounds. Use with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres au centre du bord supérieur du rectangle " +"englobant du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the center of the right edge of the parent control's " "bounds. Use with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres au centre du bord droit du rectangle englobant " +"du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the center of the bottom edge of the parent control's " "bounds. Use with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres au centre du bord du bas du rectangle " +"englobant du contrôle parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to the center of the parent control's bounds. Use with " "[method set_anchors_preset]." msgstr "" +"Magnétise les 4 ancres au centre du rectangle englobant de contrôle parent. " +"À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" @@ -21696,6 +22407,10 @@ msgid "" "becomes relative to the left edge and the top margin relative to the top " "left corner of the node's parent. Use with [method set_anchors_preset]." msgstr "" +"Magnétise les 4 ancres sur le bord gauche du contrôle parent. La marge " +"gauche devient alors relative au bord gauche et à la marge supérieure par " +"rapport au coin supérieur gauche du nÅ“ud parent). À utiliser avec [méthod " +"set_anchors_preset]." #: doc/classes/Control.xml msgid "" @@ -21704,6 +22419,11 @@ msgid "" "edge, and the right margin relative to the top right corner of the node's " "parent. Use with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres sur le bord supérieur du contrôle parent. La " +"marge gauche devient alors par rapport au coin supérieur gauche, à la marge " +"supérieure par rapport au bord supérieur, et à la marge droite par rapport " +"au coin supérieur droit du nÅ“ud parent . À utiliser avec [méthod " +"set_anchors_preset]." #: doc/classes/Control.xml msgid "" @@ -21711,6 +22431,10 @@ msgid "" "becomes relative to the right edge and the top margin relative to the top " "right corner of the node's parent. Use with [method set_anchors_preset]." msgstr "" +"Magnétise les 4 ancres au bord droit du contrôle parent. La marge droite " +"devient alors par rapport au bord droit et à la marge supérieure par rapport " +"au coin supérieur droit du nÅ“ud parent. À utiliser avec [méthod " +"set_anchors_preset]." #: doc/classes/Control.xml msgid "" @@ -21719,18 +22443,26 @@ msgid "" "the bottom edge, and the right margin relative to the bottom right corner of " "the node's parent. Use with [method set_anchors_preset]." msgstr "" +"Magnétise les 4 ancres au bord inférieur du contrôle parent. La marge gauche " +"devient alors par rapport au coin inférieur gauche, à la marge inférieure " +"par rapport au bord inférieur, et à la marge droite par rapport au coin " +"inférieur droit du nÅ“ud parent. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to a vertical line that cuts the parent control in half. " "Use with [method set_anchors_preset]." msgstr "" +"Magnétise les 4 ancres sur une ligne verticale qui coupe le contrôle parent " +"en deux. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" "Snap all 4 anchors to a horizontal line that cuts the parent control in " "half. Use with [method set_anchors_preset]." msgstr "" +"Magnétise les 4 ancres sur une ligne horizontale qui coupe le contrôle " +"parent en deux. À utiliser avec [méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "" @@ -21739,6 +22471,11 @@ msgid "" "parent control. This is equivalent to the \"Full Rect\" layout option in the " "editor. Use with [method set_anchors_preset]." msgstr "" +"Magnétise toutes les 4 ancres aux angles respectifs du contrôle parent. " +"Réglez toutes les 4 marges à 0 après avoir appliqué ce préréglage et le " +"[Control] s'adaptera à son contrôle parent. Ceci est équivalent à l'option " +"de mise en page \"Rectangle complet\" dans l'éditeur. À utiliser avec " +"[méthod set_anchors_preset]." #: doc/classes/Control.xml msgid "The control will be resized to its minimum size." @@ -21762,6 +22499,9 @@ msgid "" "the available space without pushing any other node. Use with [member " "size_flags_horizontal] and [member size_flags_vertical]." msgstr "" +"Signale au [Container] parent d'étendre les limites de ce nÅ“ud pour remplir " +"tout l'espace disponible sans pousser un autre nÅ“ud. À utiliser avec [member " +"size_flags_horizontal] et [member size_flags_vertical]." #: doc/classes/Control.xml msgid "" @@ -21771,12 +22511,19 @@ msgid "" "size_flags_stretch_ratio]. Use with [member size_flags_horizontal] and " "[member size_flags_vertical]." msgstr "" +"Signale au [Container] parent de laisser ce nÅ“ud prendre tout l'espace " +"disponible sur l'axe spécifié. Si plusieurs nÅ“uds voisins sont prêts à " +"s'étendre, ils partagent l'espace en fonction de leur rapport d'étirement. " +"Voir [member size_flags_stretch_ratio]. À utiliser avec [member " +"size_flags_horizontal] et [member size_flags_vertical]." #: doc/classes/Control.xml msgid "" "Sets the node's size flags to both fill and expand. See the 2 constants " "above for more information." msgstr "" +"Définit les drapeaux de taille du nÅ“ud pour à la fois remplir et s'étendre. " +"Voir les 2 constantes ci-dessus pour plus d'informations." #: doc/classes/Control.xml msgid "" @@ -21882,6 +22629,10 @@ msgid "" "variables, like [member anchor_left]. To change all 4 anchors at once, use " "[method set_anchors_preset]." msgstr "" +"Magnétise l'un des 4 côtés d'ancrage à l'origine de l'ancrage [code]Rect[/" +"code], en haut à gauche. Utilisez-le avec l'une des variables membres " +"[code]anchor_[* /code], comme [member anchor_left]. Pour modifier les 4 " +"ancres à la fois, utilisez [method set_anchors_preset]." #: doc/classes/Control.xml msgid "" @@ -21890,6 +22641,10 @@ msgid "" "member variables, like [member anchor_left]. To change all 4 anchors at " "once, use [method set_anchors_preset]." msgstr "" +"Magnétise l'un des 4 côtés d'ancrage à l'extrémité de l'extrémité " +"[code]Rect[/code], en bas à droite. Utilisez-le avec l'une des variables " +"membres [code]anchor_[* /code], comme [member anchor_left]. Pour modifier " +"les 4 ancres à la fois, utilisez [method set_anchors_preset]." #: doc/classes/ConvexPolygonShape.xml msgid "Convex polygon shape for 3D physics." @@ -22110,7 +22865,6 @@ msgstr "L'amortissement varie le long de cette [Curve]." #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml -#, fuzzy msgid "Damping randomness ratio." msgstr "Ratio d’amortissement aléatoire." @@ -22139,6 +22893,8 @@ msgid "" "Sets the [Color]s to modulate particles by when using [constant " "EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]." msgstr "" +"Définit les [Color] pour moduler les particules en utilisant [constant " +"EMISSION_SHAPE_POINTS] ou [constant EMISSION_SHAPE_DIRECTED_POINTS]." #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "" @@ -22153,6 +22909,9 @@ msgid "" "Sets the initial positions to spawn particles when using [constant " "EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]." msgstr "" +"Définit les positions initiales pour les particules créées en utilisant " +"[constant EMISSION_SHAPE_POINTS] ou [constant " +"EMISSION_SHAPE_DIRECTED_POINTS]." #: doc/classes/CPUParticles.xml msgid "" @@ -22172,6 +22931,8 @@ msgid "" "The inner radius for the ring shaped emitter when using [constant " "EMISSION_SHAPE_RING]." msgstr "" +"Le rayon intérieur de l'émetteur en anneau quand définit à [constant " +"EMISSION_SHAPE_RING]." #: doc/classes/CPUParticles.xml msgid "" @@ -22404,6 +23165,9 @@ msgid "" "Each particle's initial direction range from [code]+spread[/code] to [code]-" "spread[/code] degrees. Applied to X/Z plane and Y/Z planes." msgstr "" +"La direction initiale de chaque particule dans l'intervalle de " +"[code]+spread[/code] à [code]-spread[/code] degrés. Appliquée aux plans sur " +"X/Z et aux plans sur Y/Z." #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml @@ -22633,6 +23397,8 @@ msgid "" "The sphere's radius if [member emission_shape] is set to [constant " "EMISSION_SHAPE_SPHERE]." msgstr "" +"Le rayon de la sphère si [member emission_shape] est [constant " +"EMISSION_SHAPE_SPHERE]." #: doc/classes/CPUParticles2D.xml doc/classes/Particles.xml #: doc/classes/Particles2D.xml @@ -22682,6 +23448,8 @@ msgid "" "Particles will be emitted on the surface of a sphere flattened to two " "dimensions." msgstr "" +"Les particules seront émises à la surface d'une sphère aplatie en deux " +"dimensions." #: doc/classes/CPUParticles2D.xml msgid "Particles will be emitted in the area of a rectangle." @@ -22778,6 +23546,11 @@ msgid "" "string-comparison-with-double-hmac-strategy]this blog post[/url] for more " "information." msgstr "" +"Compare deux [PoolByteArray] pour l'égalité sans fuite temporelle " +"d'informations afin de prévenir les attaques temporelles.\n" +"Voir [url=https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-" +"string-comparison-with-double-hmac-strategy]ce blog[/url] pour plus " +"d'informations." #: doc/classes/Crypto.xml msgid "" @@ -22816,6 +23589,8 @@ msgid "" "Generates an RSA [CryptoKey] that can be used for creating self-signed " "certificates and passed to [method StreamPeerSSL.accept_stream]." msgstr "" +"Génère une [CryptoKey] RSA qui peut être utilisé pour créer des certificats " +"autosignés et transmis à [method StreamPeerSSL.accept_stream]" #: doc/classes/Crypto.xml msgid "" @@ -22991,7 +23766,6 @@ msgid "" msgstr "" #: modules/csg/doc_classes/CSGCylinder.xml -#, fuzzy msgid "A CSG Cylinder shape." msgstr "Une forme de cylindre CSG." @@ -23113,12 +23887,18 @@ msgid "" "shape. If [code]false[/code] the top half of the material is repeated every " "step of the extrusion." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], par défaut, la moitié " +"supérieure du [member material] est étirée sur toute la longueur de la forme " +"extrudée. Si [code]false[/code] la partie supérieure du matériau est répétée " +"à chaque étape de l'extrusion." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" "When [member mode] is [constant MODE_PATH], the path interval or ratio of " "path points to extrusions." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], l'intervalle de chemin ou le " +"rapport de chemin pointe vers les extrusions." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23126,6 +23906,10 @@ msgid "" "interval should be by distance ([constant PATH_INTERVAL_DISTANCE]) or " "subdivision fractions ([constant PATH_INTERVAL_SUBDIVIDE])." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], cela déterminera si " +"l'intervalle doit être suivant la distance ([constant " +"PATH_INTERVAL_DISTANCE]) ou suivant une fraction des sous-divisions " +"([constant PATH_INTERVAL_SUBDIVIDE])." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23133,6 +23917,9 @@ msgid "" "the path are joined, by adding an extrusion between the last and first " "points of the path." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], si [code]true[/code] les " +"extrémités du chemin sont jointes, en ajoutant une extrusion entre le " +"dernier et le premier points du chemin." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23140,24 +23927,34 @@ msgid "" "[Transform] of the [CSGPolygon] is used as the starting point for the " "extrusions, not the [Transform] of the [member path_node]." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], si [code]true[/code] la " +"[Transform] du [CSGPolygon] est utilisée comme point de départ pour les " +"extrusions, et non pas la [Transform] du [member path_node]." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" "When [member mode] is [constant MODE_PATH], the location of the [Path] " "object used to extrude the [member polygon]." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], l'emplacement de l'objet " +"[Path] utilisé pour extruder le [member polygon]." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" "When [member mode] is [constant MODE_PATH], the [enum PathRotation] method " "used to rotate the [member polygon] as it is extruded." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], la méthode [enum " +"PathRotation] utilisée pour faire pivoter le [member polygon] selon son " +"extrusion." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" "When [member mode] is [constant MODE_PATH], extrusions that are less than " "this angle, will be merged together to reduce polygon count." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], les extrusions qui sont " +"inférieures à cet angle seront fusionnés pour réduire le nombre de polygones." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23165,6 +23962,10 @@ msgid "" "path, in meters, the texture coordinates will tile. When set to 0, texture " "coordinates will match geometry exactly with no tiling." msgstr "" +"Lorsque [member mode] est [constant MODE_PATH], c'est la distance le long du " +"chemin, en mètres, que les coordonnées de texture seront répétées. Quand à " +"0, les coordonnées de texture correspondront exactement à la géométrie sans " +"répétition." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23175,6 +23976,12 @@ msgid "" "[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh " "will be generated." msgstr "" +"Le tableau de points qui définit le polygone 2D extrudé. Cela peut être un " +"polygone convexe ou concave avec 3 points ou plus. Le polygone ne doit " +"[i]pas[/i] avoir de bords qui sont des intersections. Sinon, la " +"triangulation échouera et aucun maillage ne sera généré.\n" +"[b]Note :[/b] Si seulement 1 ou 2 points sont définis dans [member polygon], " +"aucun maillage ne sera généré." #: modules/csg/doc_classes/CSGPolygon.xml #, fuzzy @@ -23216,6 +24023,9 @@ msgid "" "[b]Note:[/b] Requires the path's Z coordinates to continually decrease to " "ensure viable shapes." msgstr "" +"La forme [member polygon] n'a pas pivoté.\n" +"[b]Note :[/b] Nécessite que les coordonnées Z du chemin diminuent en " +"continue pour assurer des formes viables." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23224,12 +24034,17 @@ msgid "" "[b]Note:[/b] Requires the path's Z coordinates to continually decrease to " "ensure viable shapes." msgstr "" +"La forme [member polygon] est pivotée le long du chemin, mais elle n'est pas " +"pivotée autour de l'axe du chemin.\n" +"[b]Note :[/b] Nécessite que les coordonnées Z du chemin diminuent en " +"continue pour assurer des formes viables." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" "The [member polygon] shape follows the path and its rotations around the " "path axis." msgstr "" +"La forme [member polygon] suit le chemin et pivote autour de l'axe du chemin." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" @@ -23237,12 +24052,17 @@ msgid "" "will determine the distance, in meters, each interval of the path will " "extrude." msgstr "" +"Lorsque [member mode] est défini à [constant MODE_PATH], [member " +"path_interval] déterminera la distance, en mètres, entre chaque intervalle " +"où le chemin s'extrudera." #: modules/csg/doc_classes/CSGPolygon.xml msgid "" "When [member mode] is set to [constant MODE_PATH], [member path_interval] " "will subdivide the polygons along the path." msgstr "" +"Lorsque [member mode] est défini [constant MODE_PATH], [member " +"path_interval] divisera les polygones le long du chemin." #: modules/csg/doc_classes/CSGPrimitive.xml msgid "Base class for CSG primitives." @@ -23304,12 +24124,16 @@ msgid "" "Sets individual bits on the layer mask. Use this if you only need to change " "one layer's value." msgstr "" +"Définit des bits individuels sur le masque de calque. Utilisez ceci si vous " +"n'avez besoin que de changer de calque." #: modules/csg/doc_classes/CSGShape.xml doc/classes/SoftBody.xml msgid "" "Sets individual bits on the collision mask. Use this if you only need to " "change one layer's value." msgstr "" +"Définit des bits individuels sur le masque de collision. Utilisez ceci si " +"vous n'avez besoin que de changer de calque." #: modules/csg/doc_classes/CSGShape.xml msgid "" @@ -23624,6 +24448,16 @@ msgid "" "this, increase [member subdivide_depth], [member subdivide_height] and " "[member subdivide_width] until you no longer notice UV jittering." msgstr "" +"Générer un cuboïde [PrimitiveMesh] aligné sur les axes.\n" +"La projection des UV du cube est disposée selon une disposition de 3×2 qui " +"permet de placer une texture sur chaque face individuellement. Pour " +"appliquer la même texture sur toutes les faces, modifiez la propriété UV du " +"matériau actif à [code]Vector3(3, 2, 1)[/code].\n" +"[b]Note :[/b] Lors de l'utilisation d'une grande texture [CubeMesh] (par " +"exemple pour le sol), vous pouvez tomber sur des problèmes de jittering de " +"l'UV suivant l'angle de la caméra. Pour résoudre cela, augmentez [member " +"subdivide_depth], [member subdivide_height] et [member subdivide_width] " +"jusqu'à ce que vous ne remarquez plus le jittering de l'UV." #: doc/classes/CubeMesh.xml msgid "Size of the cuboid mesh." @@ -23632,14 +24466,17 @@ msgstr "Taille du maillage cuboïde." #: doc/classes/CubeMesh.xml msgid "Number of extra edge loops inserted along the Z axis." msgstr "" +"Le nombre de boucles de bord supplémentaires insérées le long de l'axe Z." #: doc/classes/CubeMesh.xml msgid "Number of extra edge loops inserted along the Y axis." msgstr "" +"Le nombre de boucles de bord supplémentaires insérées le long de l'axe Y." #: doc/classes/CubeMesh.xml msgid "Number of extra edge loops inserted along the X axis." msgstr "" +"Le nombre de boucles de bord supplémentaires insérées le long de l'axe X." #: doc/classes/CullInstance.xml msgid "Parent of all nodes that can be culled by the Portal system." @@ -23753,6 +24590,9 @@ msgid "" "ranges between [code]0[/code] and [code]1[/code] on the Y axis and positions " "points relative to the [code]0.5[/code] Y position." msgstr "" +"Une courbe qui peut être sauvegardée et réutilisée pour d'autres objets. Par " +"défaut, elle va de [code]0[/code] à [code]1[/code] selon l'axe Y et les " +"positions sont relatives à la position [code]0.5[/code] de l'axe Y." #: doc/classes/Curve.xml msgid "" @@ -23762,6 +24602,12 @@ msgid "" "assignments to the [code]*_tangent[/code] angle if [code]*_mode[/code] is " "set to [constant TANGENT_FREE]." msgstr "" +"Ajoute un point à la courbe. Pour chaque côté, si le [code]*_mode[/code] est " +"[constant TANGENT_LINEAR], l'angle [code]*_tangent[/code] (en degrés) " +"utilise la pente de la courbe définie par rapport à la demi-distance du " +"point adjacent. Permet des spécifier des tangentes personnalisées avec " +"[code]*_tangent[/code] si [code]*_mode[/code] est défini à [constant " +"TANGENT_FREE]." #: doc/classes/Curve.xml msgid "Recomputes the baked cache of points for the curve." @@ -23772,6 +24618,8 @@ msgid "" "Removes points that are closer than [code]CMP_EPSILON[/code] (0.00001) units " "to their neighbor on the curve." msgstr "" +"Retire les points qui sont plus proches que [code]CMP_EPSILON[/code] " +"(0.00001) unités à leur voisin sur la courbe." #: doc/classes/Curve.xml doc/classes/Curve2D.xml doc/classes/Curve3D.xml msgid "Removes all points from the curve." @@ -23816,6 +24664,8 @@ msgid "" "Returns the Y value for the point that would exist at the X position " "[code]offset[/code] along the curve." msgstr "" +"Retourne la valeur Y pour un point qui existerait à la position X " +"[code]offset[/code] le long de la courbe." #: doc/classes/Curve.xml msgid "" @@ -23823,6 +24673,9 @@ msgid "" "[code]offset[/code] along the curve using the baked cache. Bakes the curve's " "points if not already baked." msgstr "" +"Retourne la valeur Y pour un point qui existerait à la position X " +"[code]offset[/code] le long de la courbe en utilisant le cache précalculé. " +"Précalcule les points de la courbe suivante si ça n'a pas déjà été fait." #: doc/classes/Curve.xml msgid "Removes the point at [code]index[/code] from the curve." @@ -23897,6 +24750,8 @@ msgid "" "The curve calculates the tangent on this side of the point as the slope " "halfway towards the adjacent point." msgstr "" +"La courbe calcule la tangente de ce côté du point comme la pente avec la " +"demi-distance du point adjacent." #: doc/classes/Curve.xml msgid "The total number of available tangent modes." @@ -24696,13 +25551,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -24714,8 +25573,12 @@ msgstr "" "Voir [enum ShadowDepthRange]." #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." -msgstr "Distance maximale pour les fractionnements d’ombre." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." +msgstr "" #: doc/classes/DirectionalLight.xml msgid "The light's shadow rendering algorithm. See [enum ShadowMode]." @@ -24732,23 +25595,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -33073,9 +33936,8 @@ msgstr "" "[Gradient]." #: doc/classes/GradientTexture2D.xml -#, fuzzy msgid "Gradient-filled 2D texture." -msgstr "Texture remplie de gradients." +msgstr "Texture de gradient 2D." #: doc/classes/GradientTexture2D.xml msgid "" @@ -34350,9 +35212,8 @@ msgstr "" "valeur redimensionnera [member map_data]." #: doc/classes/HFlowContainer.xml -#, fuzzy msgid "Horizontal flow container." -msgstr "Conteneur de boîte horizontale." +msgstr "Conteneur de flux horizontal." #: doc/classes/HFlowContainer.xml msgid "Horizontal version of [FlowContainer]." @@ -36022,7 +36883,6 @@ msgstr "" "max_redirects]." #: doc/classes/Image.xml -#, fuzzy msgid "Image datatype." msgstr "Type de données d’image." @@ -37515,7 +38375,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -38155,10 +39018,11 @@ msgstr "Type d’évènement d’entrée pour les évènements de mouvement de s msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -38527,6 +39391,13 @@ msgstr "" "automatiquement." #: doc/classes/InterpolatedCamera.xml +#, fuzzy +msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" +"La méthode de mise à jour de la camera. Voir [enum Camera2DProcessMode]." + +#: doc/classes/InterpolatedCamera.xml msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." @@ -42519,37 +43390,32 @@ msgstr "" "un tableau des sommets donc ce tableau doit être présent." #: doc/classes/Mesh.xml -#, fuzzy msgid "Mesh array contains normals." msgstr "Un maillage de points contient des normales." #: doc/classes/Mesh.xml -#, fuzzy msgid "Mesh array contains tangents." msgstr "Un maillage de points contient des tangentes." #: doc/classes/Mesh.xml -#, fuzzy msgid "Mesh array contains colors." -msgstr "Un maillage de points contient les couleurs." +msgstr "Un maillage de points contient des couleurs." #: doc/classes/Mesh.xml -#, fuzzy msgid "Mesh array contains UVs." -msgstr "Un maillage de points contient les UV." +msgstr "Un maillage de points contient des UV." #: doc/classes/Mesh.xml msgid "Mesh array contains second UV." -msgstr "Un maillage de points contient les UV secondaires." +msgstr "Un maillage de points contient des UV secondaires." #: doc/classes/Mesh.xml -#, fuzzy msgid "Mesh array contains bones." -msgstr "Un maillage de points contient les os." +msgstr "Un maillage de points contient des os." #: doc/classes/Mesh.xml msgid "Mesh array contains bone weights." -msgstr "Un maillage de points contient les poids des os." +msgstr "Un maillage de points contient des poids d'os." #: doc/classes/Mesh.xml msgid "Mesh array uses indices." @@ -44554,7 +45420,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -44667,6 +45533,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -47349,7 +48223,7 @@ msgstr "" #: doc/classes/Node2D.xml msgid "Local [Transform2D]." -msgstr "[Transform2D] local." +msgstr "[Transform2D] locale." #: doc/classes/Node2D.xml msgid "" @@ -51953,7 +52827,7 @@ msgstr "Représente la taille de l'énumération [enum Monitor]." #: doc/classes/PHashTranslation.xml msgid "Optimized translation." -msgstr "Translation optimisée." +msgstr "Traduction optimisée." #: doc/classes/PHashTranslation.xml msgid "" @@ -59564,8 +60438,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -68718,10 +69592,32 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" -"Formate la chaîne de caractères en remplaçant toutes les occurences de " -"[code]placeholder[/code] par [code]values[/code]." #: doc/classes/String.xml msgid "If the string is a valid file path, returns the base directory name." @@ -69445,9 +70341,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -70427,12 +71325,12 @@ msgstr "" "[code]tab_idx[/code], le rendant non-interactif." #: doc/classes/TabContainer.xml -#, 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 "" -"Retourne [code]true[/code] si la piste à l'index [code]idx[/code] est active." +"Si [code]hidden[/code] est [code]true[/code], cache l'onglet à l'index " +"[code]tab_idx[/code], se faisait disparaitre de l'aire des onglets." #: doc/classes/TabContainer.xml msgid "Sets an icon for the tab at index [code]tab_idx[/code]." @@ -71236,6 +72134,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "Si [code]true[/code], un clic droit affiche le menu contextuel." #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Si [code]true[/code], la valeur peut être sélectionnée et modifiée." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -74138,13 +75041,13 @@ msgstr "" "matrice. L'axe [code]axis[/code] doit être normalisé." #: doc/classes/Transform.xml -#, fuzzy msgid "" "Returns a copy of the transform with its basis and origin scaled by the " "given [code]scale[/code] factor, using matrix multiplication." msgstr "" -"Met à l'échelle le transform par le facteur d'échelle donné, en utilisant la " -"multiplication matricielle." +"Retourne une copie de la transformation avec sa base et son origine mis à " +"l'échelle par le facteur [code]scale[/code], en utilisant la multiplication " +"matricielle." #: doc/classes/Transform.xml doc/classes/Transform2D.xml msgid "" @@ -77426,9 +78329,8 @@ msgid "" msgstr "" #: doc/classes/VFlowContainer.xml -#, fuzzy msgid "Vertical flow container." -msgstr "Conteneur vertical." +msgstr "Conteneur de flux vertical." #: doc/classes/VFlowContainer.xml msgid "Vertical version of [FlowContainer]." @@ -77976,9 +78878,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -78011,8 +78914,12 @@ msgstr "" "l'arrière-plan de manière transparente." #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." -msgstr "Le mode de rendu de la fenêtre d'affichage." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." +msgstr "" #: doc/classes/Viewport.xml msgid "" diff --git a/doc/translations/gl.po b/doc/translations/gl.po index 39d5ab2f2b..3273cd8f98 100644 --- a/doc/translations/gl.po +++ b/doc/translations/gl.po @@ -12140,10 +12140,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19425,13 +19427,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19441,7 +19447,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19458,23 +19468,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29820,7 +29830,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30394,10 +30407,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30720,6 +30734,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36120,7 +36139,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36231,6 +36250,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49810,8 +49837,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58180,7 +58207,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58777,9 +58828,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60316,6 +60369,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66390,9 +66447,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66421,7 +66479,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/hi.po b/doc/translations/hi.po index a104e2ae6d..361c131a40 100644 --- a/doc/translations/hi.po +++ b/doc/translations/hi.po @@ -12139,10 +12139,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19424,13 +19426,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19440,7 +19446,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19457,23 +19467,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29819,7 +29829,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30393,10 +30406,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30719,6 +30733,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36119,7 +36138,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36230,6 +36249,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49809,8 +49836,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58179,7 +58206,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58776,9 +58827,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60315,6 +60368,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66389,9 +66446,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66420,7 +66478,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/hu.po b/doc/translations/hu.po index 280424c8c0..2732b7b56a 100644 --- a/doc/translations/hu.po +++ b/doc/translations/hu.po @@ -12158,10 +12158,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19443,13 +19445,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19459,7 +19465,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19476,23 +19486,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29838,7 +29848,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30412,10 +30425,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30738,6 +30752,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36138,7 +36157,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36249,6 +36268,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49828,8 +49855,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58198,7 +58225,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58795,9 +58846,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60334,6 +60387,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66408,9 +66465,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66439,7 +66497,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/id.po b/doc/translations/id.po index 2f741d544d..efc379cffd 100644 --- a/doc/translations/id.po +++ b/doc/translations/id.po @@ -12551,10 +12551,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19838,13 +19840,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19854,7 +19860,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19871,23 +19881,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30244,7 +30254,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30818,10 +30831,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31144,6 +31158,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36564,7 +36583,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36676,6 +36695,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50277,8 +50304,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58650,7 +58677,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59247,9 +59298,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60790,6 +60843,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66865,9 +66922,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66896,7 +66954,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/is.po b/doc/translations/is.po index 4dd42d807e..bdd631ef18 100644 --- a/doc/translations/is.po +++ b/doc/translations/is.po @@ -12139,10 +12139,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19424,13 +19426,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19440,7 +19446,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19457,23 +19467,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29819,7 +29829,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30393,10 +30406,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30719,6 +30733,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36119,7 +36138,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36230,6 +36249,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49809,8 +49836,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58179,7 +58206,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58776,9 +58827,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60315,6 +60368,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66389,9 +66446,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66420,7 +66478,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/it.po b/doc/translations/it.po index 9157d2ecc0..3d9cd62b30 100644 --- a/doc/translations/it.po +++ b/doc/translations/it.po @@ -13170,10 +13170,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -20563,13 +20565,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20579,7 +20585,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20596,23 +20606,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -31009,7 +31019,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -31584,10 +31597,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31914,6 +31928,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -37368,7 +37387,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -37481,6 +37500,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -51136,8 +51163,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -59529,7 +59556,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -60126,9 +60177,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -61688,6 +61741,13 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" +"Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento " +"è disabilitato." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67830,9 +67890,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67864,7 +67925,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/ja.po b/doc/translations/ja.po index 75d4179693..8ace2ec0c8 100644 --- a/doc/translations/ja.po +++ b/doc/translations/ja.po @@ -15107,10 +15107,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -22561,13 +22563,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -22577,7 +22583,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -22594,23 +22604,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -33071,7 +33081,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -33645,10 +33658,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -33977,6 +33991,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -39508,7 +39527,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -39623,6 +39642,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -53345,8 +53372,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -62077,7 +62104,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -62674,9 +62725,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -64251,6 +64304,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "[code]true[/code] ã§ã‚ã‚Œã°ã€ãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯ä¸å¤®ã«ãªã‚Šã¾ã™ã€‚" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -70432,9 +70490,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -70464,7 +70523,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/ko.po b/doc/translations/ko.po index a30a93f652..bd808074b9 100644 --- a/doc/translations/ko.po +++ b/doc/translations/ko.po @@ -15,12 +15,13 @@ # whatthesamuel <alex01763@gmail.com>, 2021. # 한수현 <shh1473@ajou.ac.kr>, 2022. # vrSono <global.sonogong@gmail.com>, 2022. +# 김태우 <ogosengi3@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-13 03:39+0000\n" -"Last-Translator: vrSono <global.sonogong@gmail.com>\n" +"PO-Revision-Date: 2022-06-29 10:30+0000\n" +"Last-Translator: 김태우 <ogosengi3@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ko/>\n" "Language: ko\n" @@ -28,7 +29,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.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -88,7 +89,7 @@ msgstr "(%s를 ë®ì–´ì”€)" #: doc/tools/make_rst.py msgid "Default" -msgstr "" +msgstr "기본값" #: doc/tools/make_rst.py msgid "Setter" @@ -96,7 +97,7 @@ msgstr "Setter" #: doc/tools/make_rst.py msgid "value" -msgstr "" +msgstr "ê°’" #: doc/tools/make_rst.py msgid "Getter" @@ -12316,10 +12317,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19650,13 +19653,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19666,7 +19673,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19683,23 +19694,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30129,7 +30140,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30703,10 +30717,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31030,6 +31045,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36462,7 +36482,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36575,6 +36595,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50318,8 +50346,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58692,7 +58720,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59289,9 +59341,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60836,6 +60890,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66936,9 +66995,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66967,7 +67027,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/lt.po b/doc/translations/lt.po index 1139bf4f82..2de21d55b3 100644 --- a/doc/translations/lt.po +++ b/doc/translations/lt.po @@ -12149,10 +12149,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19434,13 +19436,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19450,7 +19456,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19467,23 +19477,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29829,7 +29839,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30403,10 +30416,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30729,6 +30743,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36129,7 +36148,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36240,6 +36259,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49819,8 +49846,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58189,7 +58216,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58786,9 +58837,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60325,6 +60378,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66399,9 +66456,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66430,7 +66488,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/lv.po b/doc/translations/lv.po index 627035b696..45e3188446 100644 --- a/doc/translations/lv.po +++ b/doc/translations/lv.po @@ -12154,10 +12154,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19439,13 +19441,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19455,7 +19461,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19472,23 +19482,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29837,7 +29847,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30411,10 +30424,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30737,6 +30751,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36137,7 +36156,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36248,6 +36267,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49827,8 +49854,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58197,7 +58224,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58794,9 +58845,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60333,6 +60386,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66407,9 +66464,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66438,7 +66496,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/mr.po b/doc/translations/mr.po index d4e8907c1d..b943c79052 100644 --- a/doc/translations/mr.po +++ b/doc/translations/mr.po @@ -12137,10 +12137,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19422,13 +19424,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19438,7 +19444,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19455,23 +19465,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29817,7 +29827,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30391,10 +30404,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30717,6 +30731,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36117,7 +36136,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36228,6 +36247,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49807,8 +49834,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58177,7 +58204,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58774,9 +58825,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60313,6 +60366,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66387,9 +66444,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66418,7 +66476,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/nb.po b/doc/translations/nb.po index 9aa8c17200..53fca58f26 100644 --- a/doc/translations/nb.po +++ b/doc/translations/nb.po @@ -12149,10 +12149,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19434,13 +19436,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19450,7 +19456,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19467,23 +19477,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29829,7 +29839,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30403,10 +30416,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30729,6 +30743,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36129,7 +36148,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36240,6 +36259,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49819,8 +49846,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58189,7 +58216,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58786,9 +58837,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60325,6 +60378,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66399,9 +66456,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66430,7 +66488,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/ne.po b/doc/translations/ne.po index f129446976..24062d3cff 100644 --- a/doc/translations/ne.po +++ b/doc/translations/ne.po @@ -12137,10 +12137,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19422,13 +19424,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19438,7 +19444,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19455,23 +19465,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29817,7 +29827,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30391,10 +30404,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30717,6 +30731,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36117,7 +36136,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36228,6 +36247,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49807,8 +49834,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58177,7 +58204,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58774,9 +58825,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60313,6 +60366,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66387,9 +66444,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66418,7 +66476,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/nl.po b/doc/translations/nl.po index 7a96e774df..b2066a5491 100644 --- a/doc/translations/nl.po +++ b/doc/translations/nl.po @@ -12206,10 +12206,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19491,13 +19493,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19507,7 +19513,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19524,23 +19534,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29889,7 +29899,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30463,10 +30476,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30789,6 +30803,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36189,7 +36208,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36300,6 +36319,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49879,8 +49906,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58250,7 +58277,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58847,9 +58898,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60386,6 +60439,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66460,9 +66517,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66491,7 +66549,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/pl.po b/doc/translations/pl.po index 640cfea1c8..b28e575320 100644 --- a/doc/translations/pl.po +++ b/doc/translations/pl.po @@ -12651,10 +12651,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19963,13 +19965,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19979,7 +19985,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19996,23 +20006,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30398,7 +30408,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30972,10 +30985,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31302,6 +31316,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36769,7 +36788,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36882,6 +36901,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50526,8 +50553,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58915,7 +58942,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59512,9 +59563,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -61063,6 +61116,13 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" +"JeÅ›li [code]true[/code], potomne wÄ™zÅ‚y sÄ… sortowane. W innym przypadku jest " +"wyÅ‚Ä…czone." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67169,9 +67229,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67203,7 +67264,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/pt.po b/doc/translations/pt.po index 54c5f5f2ef..99537cdd6b 100644 --- a/doc/translations/pt.po +++ b/doc/translations/pt.po @@ -9,12 +9,13 @@ # Renu <ifpilucas@gmail.com>, 2022. # Diogo Gomes <dgomes@graphnode.com>, 2022. # El_ExpertPlayer <xpertnathan37@gmail.com>, 2022. +# Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-13 03:39+0000\n" -"Last-Translator: El_ExpertPlayer <xpertnathan37@gmail.com>\n" +"PO-Revision-Date: 2022-06-29 10:31+0000\n" +"Last-Translator: Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/pt/>\n" "Language: pt\n" @@ -22,7 +23,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -78,7 +79,7 @@ msgstr "Herdado por:" #: doc/tools/make_rst.py msgid "(overrides %s)" -msgstr "" +msgstr "(recopiar %s)" #: doc/tools/make_rst.py msgid "Default" @@ -86,7 +87,7 @@ msgstr "Padrão" #: doc/tools/make_rst.py msgid "Setter" -msgstr "Definidor" +msgstr "Setter" #: doc/tools/make_rst.py msgid "value" @@ -94,13 +95,13 @@ msgstr "valor" #: doc/tools/make_rst.py msgid "Getter" -msgstr "Buscador" +msgstr "Getter" #: doc/tools/make_rst.py msgid "" "This method should typically be overridden by the user to have any effect." msgstr "" -"Este método normalmente deve ser substituÃdo pelo usuário para ter algum " +"Este método normalmente deve ser reescrito pelo usuário para que tenha algum " "efeito." #: doc/tools/make_rst.py @@ -907,7 +908,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two values by the factor defined in " "[code]weight[/code]. To perform interpolation, [code]weight[/code] should be " @@ -927,20 +927,25 @@ msgid "" "To perform eased interpolation with [method lerp], combine it with [method " "ease] or [method smoothstep]." msgstr "" -"Interpola linearmente entre dois valores através de um valor normalizado. " -"Este método é o oposto do método [method inverse_lerp].\n" +"Interpola linearmente entre dois valores pelo fator definido em " +"[code]weight[/code]. Para realizar a interpolação, [code]weight[/code] deve " +"estar entre [code]0.0[/code] e [code]1.0[/code] (inclusive). No entanto, " +"valores fora desse intervalo são permitidos e podem ser usados para realizar " +"[i]extrapolação[/i].\n" "Se os argumentos [code]from[/code] e [code]to[/code] forem do tipo [int] ou " -"[float], o retorno é um valor do tipo [float].\n" -"Se ambos são vetores de mesmo tipo ([Vector2], [Vector3] ou [Color]), o " -"valor retornado será do mesmo tipo ([code]lerp[/code] então chamará o método " -"[code]lerp[/code] do tipo de vetor em questão).\n" +"[float], o valor de retorno será um [float].\n" +"Se ambos forem do mesmo tipo de vetor ([Vector2], [Vector3] ou [Color]), o " +"valor de retorno será do mesmo tipo ([code]lerp[/code] então chama o método " +"[code]linear_interpolate[/code] do tipo de vetor).\n" "[codeblock]\n" -"lerp(0, 4, 0.75) # Retorna 3.0\n" -"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Retorna Vector2(2, 3.5)\n" -"[/codeblock]" +"lerp(0, 4, 0,75) # Retorna 3,0\n" +"lerp(Vetor2(1, 5), Vetor2(3, 2), 0.5) # Retorna Vetor2(2, 3.5)\n" +"[/codeblock]\n" +"Veja também [method inverse_lerp] que realiza o inverso desta operação. Para " +"realizar a interpolação facilitada com [method lerp], combine-o com [method " +"easy] ou [method smoothstep]." #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two angles (in radians) by a normalized " "value.\n" @@ -963,10 +968,12 @@ msgid "" "example, [code]lerp_angle(0, PI, weight)[/code] lerps counter-clockwise, " "while [code]lerp_angle(0, PI + 5 * TAU, weight)[/code] lerps clockwise." msgstr "" -"Faz a interpolação linear entre dois ângulos (em radianos) por um valor " +"Interpola linearmente entre dois ângulos (em radianos) por um valor " "normalizado.\n" -"Semelhante à [method lerp], mas faz a interpolação corretamente quando os " -"ângulos passam através de [constant @GDScript.TAU].\n" +"Semelhante a [method lerp], mas interpola corretamente quando os ângulos " +"envolvem [constant @GDScript.TAU]. Para realizar a interpolação facilitada " +"com [method lerp_angle], combine-o com [method easy] ou [method " +"smoothstep].\n" "[codeblock]\n" "extends Sprite\n" "var elapsed = 0.0\n" @@ -975,7 +982,14 @@ msgstr "" " var max_angle = deg2rad(90.0)\n" " rotation = lerp_angle(min_angle, max_angle, elapsed)\n" " elapsed += delta\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Nota:[/b] Este método lê o caminho mais curto entre [code]from[/code] e " +"[code]to[/code]. No entanto, quando esses dois ângulos estão aproximadamente " +"[code]PI + k * TAU[/code] separados para qualquer inteiro [code]k[/code], " +"não é óbvio de que maneira eles interpretam devido a erros de precisão de " +"ponto flutuante. Por exemplo, [code]lerp_angle(0, PI, weight)[/code] lê no " +"sentido anti-horário, enquanto [code]lerp_angle(0, PI + 5 * TAU, weight)[/" +"code] lê no sentido horário." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -1463,7 +1477,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns a random floating point value between [code]from[/code] and " "[code]to[/code] (both endpoints inclusive).\n" @@ -1472,12 +1485,12 @@ msgid "" "[/codeblock]\n" "[b]Note:[/b] This is equivalent to [code]randf() * (to - from) + from[/code]." msgstr "" -"Intervalo aleatório, retorna qualquer número real entre [code]from[/code] e " -"[code]to[/code].\n" +"Retorna um valor de ponto flutuante aleatório entre [code]from[/code] e " +"[code]to[/code] (ambos os endpoints inclusive).\n" "[codeblock]\n" -"prints(rand_range(0, 1), rand_range(0, 1)) # Imprime por exemplo 0.135591 " -"0.405263\n" -"[/codeblock]" +"prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n" +"[/codeblock]\n" +"[b]Nota:[/b] Isso é equivalente a [code]randf() * (to - from) + from[/code]." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -4579,9 +4592,8 @@ msgstr "" #: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml #: doc/classes/Vector3.xml -#, fuzzy msgid "Vector math" -msgstr "Vetor utilizado para matemática 2D." +msgstr "Matemática vetorial" #: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml #: doc/classes/Vector3.xml @@ -5798,9 +5810,8 @@ msgstr "" #: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml #: doc/classes/AnimationNodeTimeScale.xml #: doc/classes/AnimationNodeTransition.xml -#, fuzzy msgid "AnimationTree" -msgstr "Nó de animação." +msgstr "AnimationTree" #: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml #: doc/classes/AnimationNodeBlend2.xml @@ -6493,9 +6504,8 @@ msgid "" msgstr "" #: doc/classes/AnimationPlayer.xml -#, fuzzy msgid "Animation tutorial index" -msgstr "Nó de animação." +msgstr "Ãndice do tutorial de animação" #: doc/classes/AnimationPlayer.xml msgid "" @@ -6784,9 +6794,8 @@ msgid "" msgstr "" #: doc/classes/AnimationTree.xml -#, fuzzy msgid "Using AnimationTree" -msgstr "Reseta este [AnimationTreePlayer]." +msgstr "Usando AnimationTree" #: doc/classes/AnimationTree.xml msgid "Manually advance the animations by the specified time (in seconds)." @@ -12958,10 +12967,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -13749,9 +13760,8 @@ msgstr "" "camada -1 ou abaixo)." #: doc/classes/CanvasLayer.xml -#, fuzzy msgid "Canvas layers" -msgstr "Camada para desenhar no ecrã." +msgstr "Camadas de tela" #: doc/classes/CanvasLayer.xml msgid "Returns the RID of the canvas used by this layer." @@ -14821,9 +14831,8 @@ msgstr "" #: doc/classes/Physics2DDirectSpaceState.xml #: doc/classes/PhysicsDirectBodyState.xml #: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml -#, fuzzy msgid "Physics introduction" -msgstr "Interpolação cúbica." +msgstr "Introdução à fÃsica" #: doc/classes/CollisionShape.xml msgid "" @@ -16390,9 +16399,8 @@ msgid "GUI tutorial index" msgstr "" #: doc/classes/Control.xml -#, fuzzy msgid "Control node gallery" -msgstr "Tecla Control." +msgstr "Galeria de *nós* de controle" #: doc/classes/Control.xml msgid "All GUI Demos" @@ -20292,13 +20300,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20308,7 +20320,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20325,23 +20341,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30704,7 +30720,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -31278,10 +31297,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31608,6 +31628,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -37046,7 +37071,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -37159,6 +37184,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -38441,7 +38474,7 @@ msgstr "" #: doc/classes/Node.xml msgid "Nodes and Scenes" -msgstr "" +msgstr "Nós e Cenas" #: doc/classes/Node.xml msgid "All Demos" @@ -49310,68 +49343,67 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 3." -msgstr "" +msgstr "Nome opcional para a camada 3 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 30." -msgstr "" +msgstr "Nome opcional para a camada 30 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 31." -msgstr "" +msgstr "Nome opcional para a camada 31 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 32." -msgstr "" +msgstr "Nome opcional para a camada 32 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 4." -msgstr "" +msgstr "Nome opcional para a camada 4 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 5." -msgstr "" +msgstr "Nome opcional para a camada 5 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 6." -msgstr "" +msgstr "Nome opcional para a camada 6 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 7." -msgstr "" +msgstr "Nome opcional para a camada 7 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 8." -msgstr "" +msgstr "Nome opcional para a camada 8 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 9." -msgstr "" +msgstr "Nome opcional para a camada 9 de fÃsica 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D render layer 1." -msgstr "Nome opcional para a camada 1 da renderização 3D." +msgstr "Nome opcional para a camada 1 de renderização 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D render layer 10." -msgstr "Nome opcional para a camada 10 da renderização 3D." +msgstr "Nome opcional para a camada 10 de renderização 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D render layer 11." -msgstr "Nome opcional para a camada 11 da renderização 3D." +msgstr "Nome opcional para a camada 11 de renderização 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D render layer 12." -msgstr "Nome opcional para a camada 12 da renderização 3D." +msgstr "Nome opcional para a camada 12 de renderização 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D render layer 13." -msgstr "Nome opcional para a camada 13 da renderização 3D." +msgstr "Nome opcional para a camada 13 de renderização 3D." #: doc/classes/ProjectSettings.xml -#, fuzzy msgid "Optional name for the 3D render layer 14." -msgstr "Nome opcional para a camada 14 da renderização 3D" +msgstr "Nome opcional para a camada 14 de renderização 3D." #: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D render layer 15." @@ -49434,38 +49466,53 @@ 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 "" +"A localidade para retornar se uma tradução não estiver disponÃvel em um " +"determinado idioma. Se deixado em branco, [code]en[/code] (inglês) será " +"usado." #: doc/classes/ProjectSettings.xml msgid "" "If non-empty, this locale will be used when running the project from the " "editor." msgstr "" +"Se não estiver vazio, essa localidade será usada ao executar o projeto a " +"partir do editor." #: doc/classes/ProjectSettings.xml msgid "If [code]true[/code], logs all output to files." -msgstr "" +msgstr "Se [code]true[/code], registra todas os resultados nos arquivos." #: doc/classes/ProjectSettings.xml msgid "" "Desktop override for [member logging/file_logging/enable_file_logging], as " "log files are not readily accessible on mobile/Web platforms." msgstr "" +"Substituição da área de trabalho para [member logging/file_logging/" +"enable_file_logging], pois os arquivos de log não são facilmente acessÃveis " +"em plataformas móveis/Web." #: doc/classes/ProjectSettings.xml msgid "" "Path to logs within the project. Using an [code]user://[/code] path is " "recommended." msgstr "" +"Caminho para logs dentro do projeto. Recomenda se utilizar um caminho " +"[code]user://[/code]." #: doc/classes/ProjectSettings.xml msgid "Specifies the maximum amount of log files allowed (used for rotation)." msgstr "" +"Especifica a quantidade máxima de arquivos de log permitidos (usados para " +"rotação)." #: doc/classes/ProjectSettings.xml 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 "" +"Godot usa uma fila de mensagens para adiar algumas chamadas de função. Se " +"você ficar sem espaço nela (você verá um erro), você pode aumentar o tamanho " +"aqui." #: doc/classes/ProjectSettings.xml msgid "" @@ -49474,6 +49521,11 @@ msgid "" "on threads. If servers get stalled too often when loading resources in a " "thread, increase this number." msgstr "" +"Isso é usado por servidores quando usado no modo multi-threading (servidores " +"e visual). Os RIDs são pré-alocados para evitar a interrupção do servidor " +"que os solicita em encadeamentos. Se os servidores ficarem paralisados com " +"muita frequência ao carregar recursos em um encadeamento, aumente esse " +"número." #: doc/classes/ProjectSettings.xml msgid "" @@ -49486,6 +49538,14 @@ msgid "" "in the editor, which also includes C# [code]tool[/code] scripts running " "within the editor as well as editor plugin code." msgstr "" +"A polÃtica a ser usada para exceções Mono (C#) não tratadas. O padrão " +"\"Terminate Application\" sai do projeto assim que uma exceção não tratada é " +"lançada. Em vez disso, \"Log Error\" registra uma mensagem de erro no " +"console e não interromperá a execução do projeto quando uma exceção não " +"tratada for lançada.\n" +"[b]Observação:[/b] A polÃtica de exceção não tratada é sempre definida como " +"\"Erro de log\" no editor, que também inclui scripts C# [code]tool[/code] " +"executados no editor, bem como o código do plug-in do editor." #: doc/classes/ProjectSettings.xml msgid "" @@ -49493,42 +49553,57 @@ msgid "" "map_set_cell_height].\n" "[b]Note:[/b] Currently not implemented." msgstr "" +"Altura de célula padrão para mapas de navegação 2D. Consulte [método " +"Navigation2DServer.map_set_cell_height].\n" +"[b]Observação:[/b] atualmente não implementado." #: doc/classes/ProjectSettings.xml msgid "" "Default cell size for 2D navigation maps. See [method Navigation2DServer." "map_set_cell_size]." msgstr "" +"Tamanho de célula padrão para mapas de navegação 2D. Consulte [method " +"Navigation2DServer.map_set_cell_size]." #: doc/classes/ProjectSettings.xml msgid "" "Default edge connection margin for 2D navigation maps. See [method " "Navigation2DServer.map_set_edge_connection_margin]." msgstr "" +"Margem de conexão de borda padrão para mapas de navegação 2D. Consulte " +"[method Navigation2DServer.map_set_edge_connection_margin]." #: doc/classes/ProjectSettings.xml msgid "" "Default cell height for 3D navigation maps. See [method NavigationServer." "map_set_cell_height]." msgstr "" +"Altura de célula padrão para mapas de navegação 3D. Consulte [method " +"NavigationServer.map_set_cell_height]." #: doc/classes/ProjectSettings.xml msgid "" "Default cell size for 3D navigation maps. See [method NavigationServer." "map_set_cell_size]." msgstr "" +"Tamanho de célula padrão para mapas de navegação 3D. Consulte [method " +"NavigationServer.map_set_cell_size]." #: doc/classes/ProjectSettings.xml msgid "" "Default edge connection margin for 3D navigation maps. See [method " "NavigationServer.map_set_edge_connection_margin]." msgstr "" +"Margem de conexão de borda padrão para mapas de navegação 3D. Consulte " +"[method NavigationServer.map_set_edge_connection_margin]." #: doc/classes/ProjectSettings.xml msgid "" "Default map up vector for 3D navigation maps. See [method NavigationServer." "map_set_up]." msgstr "" +"Vetor de mapa padrão para mapas de navegação 3D. Consulte [method " +"NavigationServer.map_set_up]." #: doc/classes/ProjectSettings.xml msgid "" @@ -49536,6 +49611,9 @@ msgid "" "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" +"Quantidade máxima de caracteres permitidos para enviar como saÃda do " +"depurador. Acima desse valor, o conteúdo é descartado. Isso ajuda a não " +"travar a conexão do depurador." #: doc/classes/ProjectSettings.xml msgid "" @@ -49543,6 +49621,9 @@ msgid "" "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" +"Número máximo de erros permitidos a serem enviados como saÃda do depurador. " +"Acima desse valor, o conteúdo é descartado. Isso ajuda a não travar a " +"conexão do depurador." #: doc/classes/ProjectSettings.xml msgid "" @@ -49550,6 +49631,9 @@ msgid "" "this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" +"Quantidade máxima de mensagens permitidas para enviar como saÃda do " +"depurador. Acima desse valor, o conteúdo é descartado. Isso ajuda a não " +"travar a conexão do depurador." #: doc/classes/ProjectSettings.xml msgid "" @@ -49557,6 +49641,9 @@ msgid "" "Over this value, content is dropped. This helps not to stall the debugger " "connection." msgstr "" +"Número máximo de avisos que podem ser enviados como saÃda do depurador. " +"Acima desse valor, o conteúdo é descartado. Isso ajuda a não travar a " +"conexão do depurador." #: doc/classes/ProjectSettings.xml msgid "" @@ -49564,56 +49651,64 @@ msgid "" "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 "" +"Tamanho padrão do fluxo de pares de pacotes para desserializar dados Godot " +"(em bytes, especificado como uma potência de dois). O valor padrão [code]16[/" +"code] é igual a 65.536 bytes. Acima desse tamanho, os dados são descartados." #: doc/classes/ProjectSettings.xml msgid "Timeout (in seconds) for connection attempts using TCP." -msgstr "" +msgstr "Tempo limite (em segundos) para tentativas de conexão usando TCP." #: doc/classes/ProjectSettings.xml msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer." -msgstr "" +msgstr "Tamanho máximo (em kiB) para o buffer de entrada [WebRTCDataChannel]." #: doc/classes/ProjectSettings.xml msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer." -msgstr "" +msgstr "Tamanho máximo (em kiB) para o buffer de entrada [WebSocketClient]." #: doc/classes/ProjectSettings.xml msgid "Maximum number of concurrent input packets for [WebSocketClient]." msgstr "" +"Número máximo de pacotes de entrada simultâneos para [WebSocketClient]." #: doc/classes/ProjectSettings.xml msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer." -msgstr "" +msgstr "Tamanho máximo (em kiB) para o buffer de saÃda [WebSocketClient]." #: doc/classes/ProjectSettings.xml msgid "Maximum number of concurrent output packets for [WebSocketClient]." -msgstr "" +msgstr "Número máximo de pacotes de saÃda simultâneos para [WebSocketClient]." #: doc/classes/ProjectSettings.xml msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer." -msgstr "" +msgstr "Tamanho máximo (em kiB) para o buffer de entrada [WebSocketServer]." #: doc/classes/ProjectSettings.xml msgid "Maximum number of concurrent input packets for [WebSocketServer]." msgstr "" +"Número máximo de pacotes de entrada simultâneos para [WebSocketServer]." #: doc/classes/ProjectSettings.xml msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer." -msgstr "" +msgstr "Tamanho máximo (em kiB) para o buffer de saÃda [WebSocketServer]." #: doc/classes/ProjectSettings.xml msgid "Maximum number of concurrent output packets for [WebSocketServer]." -msgstr "" +msgstr "Número máximo de pacotes de saÃda simultâneos para [WebSocketServer]." #: doc/classes/ProjectSettings.xml msgid "" "Amount of read ahead used by remote filesystem. Higher values decrease the " "effects of latency at the cost of higher bandwidth usage." msgstr "" +"Quantidade de leitura antecipada usada pelo sistema de arquivos remoto. " +"Valores mais altos diminuem os efeitos da latência ao custo de maior uso de " +"largura de banda." #: doc/classes/ProjectSettings.xml msgid "Page size used by remote filesystem (in bytes)." -msgstr "" +msgstr "Tamanho da página usado pelo sistema de arquivos remoto (em bytes)." #: doc/classes/ProjectSettings.xml msgid "" @@ -50756,8 +50851,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -59151,7 +59246,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59748,9 +59867,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -61291,6 +61412,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Se [code]true[/code], o objeto é desenhado por cima do pai dele." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67385,9 +67511,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67416,7 +67543,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po index b32492887a..b432963519 100644 --- a/doc/translations/pt_BR.po +++ b/doc/translations/pt_BR.po @@ -13209,10 +13209,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -20592,13 +20594,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20608,7 +20614,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20625,23 +20635,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -31043,7 +31053,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -31617,10 +31630,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31951,6 +31965,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -37411,7 +37430,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -37525,6 +37544,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -51178,8 +51205,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -59588,7 +59615,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -60185,9 +60236,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -61746,6 +61799,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Retorna [code]true[/code] se o script pode ser instanciado." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67861,9 +67919,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67895,7 +67954,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/ro.po b/doc/translations/ro.po index 260a63446f..068587e37a 100644 --- a/doc/translations/ro.po +++ b/doc/translations/ro.po @@ -12169,10 +12169,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19454,13 +19456,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19470,7 +19476,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19487,23 +19497,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29852,7 +29862,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30426,10 +30439,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30752,6 +30766,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36152,7 +36171,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36263,6 +36282,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49843,8 +49870,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58213,7 +58240,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58810,9 +58861,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60349,6 +60402,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66423,9 +66480,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66454,7 +66512,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/ru.po b/doc/translations/ru.po index 36dbb7d50d..6455a611e5 100644 --- a/doc/translations/ru.po +++ b/doc/translations/ru.po @@ -48,12 +48,13 @@ # Bozhko Artyom Dmitrievich <jek_sun@mail.ru>, 2022. # FuzzMix <fmwolfiechad@gmail.com>, 2022. # ÐœÐÐ69К <weblate@mah69k.net>, 2022. +# Vadim Mitroshkin <Vadim7540@yandex.ru>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-08 06:47+0000\n" -"Last-Translator: FuzzMix <fmwolfiechad@gmail.com>\n" +"PO-Revision-Date: 2022-07-03 00:44+0000\n" +"Last-Translator: Bozhko Artyom Dmitrievich <jek_sun@mail.ru>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ru/>\n" "Language: ru\n" @@ -62,7 +63,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.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -154,7 +155,8 @@ msgstr "" #: doc/tools/make_rst.py msgid "" "This method accepts any number of arguments after the ones described here." -msgstr "Ðтот метод принимает любое количеÑтво аргументов поÑле опиÑанных." +msgstr "" +"Ðтот метод принимает любое количеÑтво аргументов поÑле опиÑанных здеÑÑŒ." #: doc/tools/make_rst.py msgid "This method is used to construct a type." @@ -533,7 +535,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " "[Array] or [Dictionary] up to its deepest level.\n" @@ -559,9 +560,9 @@ msgstr "" "- Ð”Ð»Ñ [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] и [code]RID[/code], [code]deep_equal[/code] и " "[code]==[/code] работают одинаково.\n" -"- Ð”Ð»Ñ [code]Dictionary[/code], [code]==[/code] раÑÑматривает равенÑтво и " -"только еÑли обе переменные указывают на один и тот же [code]Dictionary[/" -"code], без рекурÑии или проÑмотра Ñодержимого вообще.\n" +"- Ð”Ð»Ñ [code]Dictionary[/code], [code]==[/code] раÑÑматривает равенÑтво " +"тогда, и только тогда, когда обе переменные указывают на один и тот же " +"[code]Dictionary[/code], без рекурÑии или проÑмотра Ñодержимого вообще.\n" "- Ð”Ð»Ñ [code]Array[/code], [code]==[/code] ÑчитаетÑÑ Ñ€Ð°Ð²ÐµÐ½Ñтвом тогда, и " "только тогда, когда каждый Ñлемент в первом [code]Array[/code] равен " "Ñлементу во втором [code]Array[/code], как Ñообщает [code]==[/code]. Ðто " @@ -1006,7 +1007,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two angles (in radians) by a normalized " "value.\n" @@ -1032,7 +1032,7 @@ msgstr "" "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ ÑƒÐ³Ð»Ð°Ð¼Ð¸ (в радианах) по нормализованному " "значению.\n" "Ðналогично [методу lerp], но корректно интерполируетÑÑ, когда углы " -"оборачивают вокруг [constant @GDScript.TAU]. Чтобы выполнить упрощенную " +"оборачивают вокруг [конÑтанты @GDScript.TAU]. Чтобы выполнить упрощенную " "интерполÑцию Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ [метода lerp_angle], объедините его Ñ [методом ease] " "или [методом smoothstep].\n" "[codeblock]\n" @@ -1043,7 +1043,14 @@ msgstr "" " var max_angle = deg2rad(90.0)\n" " rotation = lerp_angle(min_angle, max_angle, elapsed)\n" " elapsed += delta\n" -"[/codeblock]" +"[/codeblock]\n" +"[b]Примечание:[/b] Ðтот метод проходит через кратчайший путь между " +"[code]from[/code] и [code]to[/code]. Тем не менее, еÑли разница между Ñтими " +"Ð´Ð²ÑƒÐ¼Ñ ÑƒÐ³Ð»Ð°Ð¼Ð¸ и любым целым чиÑлом [code]k[/code] приблизительно [code]PI + " +"k * TAU[/code], неочевидно в какую Ñторону [/code]из-за ошибок в точноÑти " +"чиÑел Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой. Ðапример, [code]lerp_angle(0, PI, weight)[/code] " +"оборачиваетÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð² чаÑовой Ñтрелки, а [code]lerp_angle(0, PI + 5 * TAU, " +"weight)[/code] оборачиваетÑÑ Ð¿Ð¾ чаÑовой." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -1292,7 +1299,6 @@ msgstr "" "координат (оÑи X и Y)." #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the integer modulus of [code]a/b[/code] that wraps equally in " "positive and negative.\n" @@ -1314,28 +1320,21 @@ msgstr "" "Возвращает целочиÑленный модуль [code]a/b[/code], который одинаково " "переноÑитÑÑ ÐºÐ°Ðº в положительный, так и в отрицательный.\n" "[codeblock]\n" -"var i = -6\n" -"while i < 5:\n" -" prints(i, posmod(i, 3))\n" -" i += 1\n" +"for i in range(-3, 4):\n" +" print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n" "[/codeblock]\n" "Produces:\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" +"-3 0 0\n" +"-2 -2 1\n" +"-1 -1 2\n" +" 0 0 0\n" +" 1 1 1\n" +" 2 2 2\n" +" 3 0 0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the result of [code]base[/code] raised to the power of [code]exp[/" "code].\n" @@ -1346,7 +1345,7 @@ msgstr "" "Возвращает результат Ð²Ð¾Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‡Ð¸Ñла [code]x[/code] в Ñтепени [code]y[/" "code].\n" "[codeblock]\n" -"pow(2, 5) # Возвращает 32\n" +"pow(2, 5) # Возвращает 32.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1525,7 +1524,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Converts an angle expressed in radians to degrees.\n" "[codeblock]\n" @@ -1534,7 +1532,7 @@ msgid "" msgstr "" "Преобразует угол, выраженный в радианах, в градуÑÑ‹.\n" "[codeblock]\n" -"rad2deg(0.523599) # Возвращает 30\n" +"rad2deg(0.523599) # Возвращает 30.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml @@ -1581,7 +1579,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns a random unsigned 32-bit integer. Use remainder to obtain a random " "value in the interval [code][0, N - 1][/code] (where N is smaller than " @@ -1660,6 +1657,44 @@ msgid "" "3\n" "[/codeblock]" msgstr "" +"Возвращает маÑÑив Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ диапазоном. [метод range] может быть вызван " +"Ñ‚Ñ€ÐµÐ¼Ñ ÑпоÑобами:\n" +"[code]range(n: int)[/code]: ÐачинаетÑÑ Ñ 0, увеличиваетÑÑ Ñ ÑˆÐ°Ð³Ð¾Ð¼ в 1 и " +"оÑтанавливаетÑÑ [i]перед[/i] [code]n[/code]. Ðргумент [code]n[/code] Ñто " +"[b]ÑкÑклюзив[/b].\n" +"[code]range(b: int, n: int)[/code]: ÐачинаетÑÑ Ñ [code]b[/code], " +"увеличиваетÑÑ Ñ ÑˆÐ°Ð³Ð¾Ð¼ в 1 и оÑтанавливаетÑÑ [i]перед[/i] [code]n[/code]. " +"Ðргументы [code]b[/code] и [code]n[/code] Ñто [b]инклюзив[/b] и " +"[b]ÑкÑклюзив[/b], ÑоответÑтвенно.\n" +"[code]range(b: int, n: int, s: int)[/code]: ÐачинаетÑÑ Ñ [code]b[/code], " +"увеличиваетÑÑ/уменьшаетÑÑ Ñ ÑˆÐ°Ð³Ð¾Ð¼ [code]s[/code], и оÑтанавливаетÑÑ " +"[i]перед[/i] [code]n[/code]. Ðргументы [code]b[/code] и [code]n[/code] Ñто " +"[b]инклюзив[/b] и [b]ÑкÑклюзив[/b], ÑоответÑтвенно. Ðргумент [code]s[/code] " +"[b]может[/b] быть негативным, но не [code]0[/code]. ЕÑли [code]s[/code] Ñто " +"[code]0[/code], будет выведено Ñообщение об ошибке.\n" +"[метод range] преобразует вÑе аргументы в [int] перед обработкой.\n" +"[b]Примечание:[/b] Возвращает пуÑтой маÑÑив, еÑли ни одно значение не " +"удовлетворÑет ограничению на значение (e.g. [code]range(2, 5, -1)[/code] или " +"[code]range(5, 5, 1)[/code]).\n" +"Примеры:\n" +"[codeblock]\n" +"print(range(4)) # Prints [0, 1, 2, 3]\n" +"print(range(2, 5)) # Prints [2, 3, 4]\n" +"print(range(0, 6, 2)) # Prints [0, 2, 4]\n" +"print(range(4, 1, -1)) # Prints [4, 3, 2]\n" +"[/codeblock]\n" +"Чтобы выполнить итерацию по [Array] в обратном порÑдке, иÑпользуйте:\n" +"[codeblock]\n" +"var array = [3, 6, 9]\n" +"for i in range(array.size(), 0, -1):\n" +" print(array[i - 1])\n" +"[/codeblock]\n" +"Вывод:\n" +"[codeblock]\n" +"9\n" +"6\n" +"3\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -1676,7 +1711,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Rounds [code]s[/code] to the nearest whole number, with halfway cases " "rounded away from zero.\n" @@ -1687,11 +1721,14 @@ msgid "" "[/codeblock]\n" "See also [method floor], [method ceil], [method stepify], and [int]." msgstr "" -"ОкруглÑет [code]s[/code] к ближайшему целому чиÑлу, при Ñтом Ñередины " -"округлÑÑŽÑ‚ÑÑ Ð¾Ñ‚ нулÑ.\n" +"ОкруглÑет [code]s[/code] к ближайшему целому чиÑлу, при Ñтом 0.5 округлÑетÑÑ " +"в большую Ñторону.\n" "[codeblock]\n" -"round(2.6) # Возвращает 3\n" -"[/codeblock]" +"a = round(2.49) # Возвращает 2.0\n" +"a = round(2.5) # Возвращает 3.0\n" +"a = round(2.51) # Возвращает 3.0\n" +"[/codeblock]\n" +"См. также[метод floor], [метод ceil], [метод stepify], и [int]." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -13799,10 +13836,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -21231,13 +21270,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -21247,7 +21290,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -21264,23 +21311,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -31684,7 +31731,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -32258,10 +32308,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -32586,6 +32637,11 @@ msgstr "ЕÑли [code]true[/code], текÑтура отражена по Ð²ÐµÑ #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -38070,7 +38126,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -38183,6 +38239,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -51969,8 +52033,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -60441,7 +60505,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -61038,9 +61126,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -62598,6 +62688,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "ЕÑли [code]true[/code], текÑтура будет центрирована." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -68866,9 +68961,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -68898,7 +68994,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/sk.po b/doc/translations/sk.po index 9fb9613f0d..4964bf3ce0 100644 --- a/doc/translations/sk.po +++ b/doc/translations/sk.po @@ -12140,10 +12140,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19425,13 +19427,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19441,7 +19447,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19458,23 +19468,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29823,7 +29833,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30397,10 +30410,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30723,6 +30737,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36123,7 +36142,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36234,6 +36253,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49813,8 +49840,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58183,7 +58210,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58780,9 +58831,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60319,6 +60372,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66393,9 +66450,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66424,7 +66482,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po index 765c89be10..89efbf0d11 100644 --- a/doc/translations/sr_Cyrl.po +++ b/doc/translations/sr_Cyrl.po @@ -12151,10 +12151,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19436,13 +19438,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19452,7 +19458,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19469,23 +19479,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29834,7 +29844,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30408,10 +30421,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30734,6 +30748,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36134,7 +36153,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36245,6 +36264,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49824,8 +49851,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58194,7 +58221,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58791,9 +58842,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60330,6 +60383,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66404,9 +66461,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66435,7 +66493,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/sv.po b/doc/translations/sv.po index 706b410d30..e562fe9d6f 100644 --- a/doc/translations/sv.po +++ b/doc/translations/sv.po @@ -12140,10 +12140,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19425,13 +19427,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19441,7 +19447,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19458,23 +19468,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29820,7 +29830,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30394,10 +30407,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30720,6 +30734,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36120,7 +36139,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36231,6 +36250,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49810,8 +49837,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58180,7 +58207,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58777,9 +58828,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60316,6 +60369,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66390,9 +66447,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66421,7 +66479,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/th.po b/doc/translations/th.po index 68c0dd503a..097eae8507 100644 --- a/doc/translations/th.po +++ b/doc/translations/th.po @@ -12246,10 +12246,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19535,13 +19537,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19551,7 +19557,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19568,23 +19578,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29961,7 +29971,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30551,10 +30564,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30881,6 +30895,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36308,7 +36327,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36420,6 +36439,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50068,8 +50095,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58444,7 +58471,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59041,9 +59092,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60584,6 +60637,10 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66671,9 +66728,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66702,7 +66760,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/tl.po b/doc/translations/tl.po index 4361ff7318..7473388512 100644 --- a/doc/translations/tl.po +++ b/doc/translations/tl.po @@ -12223,10 +12223,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19508,13 +19510,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19524,7 +19530,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19541,23 +19551,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29909,7 +29919,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30483,10 +30496,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30809,6 +30823,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36233,7 +36252,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36344,6 +36363,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -49926,8 +49953,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58296,7 +58323,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -58893,9 +58944,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60435,6 +60488,13 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" +"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-" +"so-sort ay hindi pinapagana." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66515,9 +66575,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66546,7 +66607,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/tr.po b/doc/translations/tr.po index 01b71d7673..77fbf5f31a 100644 --- a/doc/translations/tr.po +++ b/doc/translations/tr.po @@ -18,12 +18,14 @@ # yigithan <yigithanermet38@gmail.com>, 2021. # Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021, 2022. # Ramazan Aslan <legendraslan@gmail.com>, 2022. +# paledega <paledega@yandex.ru>, 2022. +# Yekez <yasintonge@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-13 03:39+0000\n" -"Last-Translator: Ramazan Aslan <legendraslan@gmail.com>\n" +"PO-Revision-Date: 2022-07-03 00:45+0000\n" +"Last-Translator: Yekez <yasintonge@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/tr/>\n" "Language: tr\n" @@ -31,7 +33,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -83,7 +85,7 @@ msgstr "Miras:" #: doc/tools/make_rst.py msgid "Inherited By:" -msgstr "" +msgstr "Kalıtılan:" #: doc/tools/make_rst.py msgid "(overrides %s)" @@ -91,19 +93,21 @@ msgstr "" #: doc/tools/make_rst.py msgid "Default" -msgstr "" +msgstr "Varsayılan" #: doc/tools/make_rst.py +#, fuzzy msgid "Setter" -msgstr "" +msgstr "Ayarlayıcı" #: doc/tools/make_rst.py msgid "value" msgstr "deÄŸer" #: doc/tools/make_rst.py +#, fuzzy msgid "Getter" -msgstr "" +msgstr "Alıcı" #: doc/tools/make_rst.py msgid "" @@ -129,13 +133,15 @@ msgstr "" #: doc/tools/make_rst.py msgid "This method is used to construct a type." -msgstr "" +msgstr "Bu method bir veri tipi oluÅŸturmak için kullanılır." #: doc/tools/make_rst.py msgid "" "This method doesn't need an instance to be called, so it can be called " "directly using the class name." msgstr "" +"Bu metod çaÄŸrılmak için bir örneklemeye ihtiyaç duymaz, bu yüzden doÄŸrudan " +"sınıf adı ile çağırılabilir." #: doc/tools/make_rst.py msgid "" @@ -12925,10 +12931,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -20232,13 +20240,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20248,7 +20260,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -20265,23 +20281,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30657,7 +30673,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -31231,10 +31250,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31560,6 +31580,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -37003,7 +37028,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -37116,6 +37141,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50748,8 +50781,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -59131,7 +59164,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59728,9 +59785,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -61277,6 +61336,12 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "" +"EÄŸer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67369,9 +67434,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67402,7 +67468,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/uk.po b/doc/translations/uk.po index e943465bca..fe1ac7f153 100644 --- a/doc/translations/uk.po +++ b/doc/translations/uk.po @@ -12302,10 +12302,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19604,13 +19606,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19620,7 +19626,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19637,23 +19647,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30019,7 +30029,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30593,10 +30606,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30920,6 +30934,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36354,7 +36373,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36467,6 +36486,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50086,8 +50113,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58462,7 +58489,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59059,9 +59110,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60607,6 +60660,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66698,9 +66756,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66729,7 +66788,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/vi.po b/doc/translations/vi.po index 81411cebb9..4dbfaf376a 100644 --- a/doc/translations/vi.po +++ b/doc/translations/vi.po @@ -12598,10 +12598,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19903,13 +19905,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19919,7 +19925,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19936,23 +19946,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -30317,7 +30327,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30891,10 +30904,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -31219,6 +31233,11 @@ msgstr "Nếu [code]true[/code] thì láºt dá»c há»a tiết." #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36655,7 +36674,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36768,6 +36787,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50402,8 +50429,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58785,7 +58812,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59382,9 +59433,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60930,6 +60983,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -67026,9 +67084,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -67058,7 +67117,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po index e39b32f496..2888f15fd1 100644 --- a/doc/translations/zh_CN.po +++ b/doc/translations/zh_CN.po @@ -62,7 +62,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-23 04:30+0000\n" +"PO-Revision-Date: 2022-07-05 23:52+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" @@ -5171,19 +5171,19 @@ msgstr "" #: doc/classes/AnimatedSprite.xml doc/classes/SpriteBase3D.xml msgid "If [code]true[/code], texture will be centered." -msgstr "为 [code]true[/code] 时纹ç†å°†è¢«å±…ä¸ã€‚" +msgstr "如果为 [code]true[/code],纹ç†å°†è¢«å±…ä¸ã€‚" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml doc/classes/TextureButton.xml #: doc/classes/TextureRect.xml msgid "If [code]true[/code], texture is flipped horizontally." -msgstr "为 [code]true[/code] 时纹ç†å°†è¢«æ°´å¹³ç¿»è½¬ã€‚" +msgstr "如果为 [code]true[/code],纹ç†å°†è¢«æ°´å¹³ç¿»è½¬ã€‚" #: doc/classes/AnimatedSprite.xml doc/classes/Sprite.xml #: doc/classes/SpriteBase3D.xml doc/classes/TextureButton.xml #: doc/classes/TextureRect.xml msgid "If [code]true[/code], texture is flipped vertically." -msgstr "为 [code]true[/code] 时纹ç†å°†è¢«åž‚直翻转。" +msgstr "如果为 [code]true[/code],纹ç†å°†è¢«åž‚直翻转。" #: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml msgid "The displayed animation frame's index." @@ -7945,7 +7945,7 @@ msgstr "该区域音频总线的å称。" #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "" "If [code]true[/code], the area's audio bus overrides the default audio bus." -msgstr "为 [code]true[/code] 时该区域的音频总线将覆盖默认的音频总线。" +msgstr "如果为 [code]true[/code],该区域的音频总线将覆盖默认的音频总线。" #: doc/classes/Area.xml msgid "" @@ -7991,13 +7991,14 @@ msgstr "" #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "If [code]true[/code], other monitoring areas can detect this area." -msgstr "为 [code]true[/code] 时其他监测区域å¯ä»¥æ£€æµ‹åˆ°è¿™ä¸ªåŒºåŸŸã€‚" +msgstr "如果为 [code]true[/code],其他监测区域å¯ä»¥æ£€æµ‹åˆ°è¿™ä¸ªåŒºåŸŸã€‚" #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "" "If [code]true[/code], the area detects bodies or areas entering and exiting " "it." -msgstr "为 [code]true[/code] 时该区域能够检测到进入和退出该区域的实体或区域。" +msgstr "" +"如果为 [code]true[/code],该区域能够检测到进入和退出该区域的实体或区域。" #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "The area's priority. Higher priority areas are processed first." @@ -8013,7 +8014,7 @@ msgstr "" #: doc/classes/Area.xml msgid "If [code]true[/code], the area applies reverb to its associated audio." -msgstr "为 [code]true[/code] 时该区域会将混å“应用于其相关音频。" +msgstr "如果为 [code]true[/code],该区域会将混å“应用于其相关音频。" #: doc/classes/Area.xml msgid "The reverb bus name to use for this area's associated audio." @@ -12370,7 +12371,7 @@ msgstr "åœæ¢éŸ³é¢‘。" #: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml msgid "If [code]true[/code], audio plays when added to scene tree." -msgstr "为 [code]true[/code] æ—¶åœ¨æ·»åŠ åˆ°åœºæ™¯æ ‘æ—¶æ’放音频。" +msgstr "如果为 [code]true[/code]ï¼Œåœ¨æ·»åŠ åˆ°åœºæ™¯æ ‘æ—¶å°†æ’放音频。" #: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml msgid "Bus on which this audio is playing." @@ -14962,7 +14963,7 @@ msgid "" "without smoothing, even with this setting enabled, invoke [method " "reset_smoothing]." msgstr "" -"为 [code]true[/code] 时,相机会在达到æžé™æ—¶å¹³æ»‘地åœæ¢ã€‚\n" +"如果为 [code]true[/code],相机会在达到æžé™æ—¶å¹³æ»‘地åœæ¢ã€‚\n" "当 [member smoothing_enabled] 为 [code]false[/code] æ—¶ï¼Œè¯¥å±žæ€§æ— æ•ˆã€‚\n" "[b]注æ„:[/b]è¦ç«‹å³å°†ç›¸æœºçš„ä½ç½®æ›´æ–°åˆ°é™åˆ¶èŒƒå›´å†…而ä¸è¿›è¡Œå¹³æ»‘,å³ä½¿å¯ç”¨äº†æ¤è®¾" "置,也è¦è°ƒç”¨ [method reset_smoothing]。" @@ -15003,15 +15004,15 @@ msgstr "相机的过程回调。请å‚阅[enum Camera2DProcessMode]。" #: doc/classes/Camera2D.xml msgid "If [code]true[/code], the camera view rotates with the target." -msgstr "为 [code]true[/code] 时,相机视图将éšç›®æ ‡æ—‹è½¬ã€‚" +msgstr "如果为 [code]true[/code],相机视图将éšç›®æ ‡æ—‹è½¬ã€‚" #: doc/classes/Camera2D.xml msgid "" "If [code]true[/code], the camera smoothly moves towards the target at " "[member smoothing_speed]." msgstr "" -"为 [code]true[/code] 时,相机将以 [member smoothing_speed] 的速度平滑地æœç›®æ ‡" -"移动。" +"如果为 [code]true[/code],相机将以 [member smoothing_speed] 的速度平滑地æœç›®" +"æ ‡ç§»åŠ¨ã€‚" #: doc/classes/Camera2D.xml msgid "" @@ -15045,10 +15046,12 @@ msgid "" msgstr "相机的ä½ç½®è¦è€ƒè™‘åž‚ç›´/æ°´å¹³å移和å±å¹•å°ºå¯¸ã€‚" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "相机通过 [code]_physics_process[/code] 回调进行更新。" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "相机通过 [code]_process[/code] 回调进行更新。" @@ -16766,11 +16769,11 @@ msgstr "" #: doc/classes/ClippedCamera.xml msgid "If [code]true[/code], the camera stops on contact with [Area]s." -msgstr "为 [code]true[/code] 时,相机将在与 [Area] 接触时åœæ¢ã€‚" +msgstr "如果为 [code]true[/code],相机将在与 [Area] 接触时åœæ¢ã€‚" #: doc/classes/ClippedCamera.xml msgid "If [code]true[/code], the camera stops on contact with [PhysicsBody]s." -msgstr "为 [code]true[/code] 时,相机将在与 [PhysicsBody] 接触时åœæ¢ã€‚" +msgstr "如果为 [code]true[/code],相机将在与 [PhysicsBody] 接触时åœæ¢ã€‚" #: doc/classes/ClippedCamera.xml msgid "" @@ -21615,7 +21618,7 @@ msgstr "" msgid "" "The [Mesh] used for each particle. If [code]null[/code], particles will be " "spheres." -msgstr "æ¯ä¸ªç²’å使用的 [Mesh]。如果[code]null[/code],则粒å将是çƒå½¢ã€‚" +msgstr "æ¯ä¸ªç²’å使用的 [Mesh]。如果为 [code]null[/code],则粒å将为çƒå½¢ã€‚" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/Particles2D.xml @@ -21640,7 +21643,7 @@ msgstr "" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "Each particle's orbital velocity will vary along this [Curve]." -msgstr "æ¯ä¸ªç²’å的轨é“é€Ÿåº¦å°†æ²¿æ¤ [Curve] å˜åŒ–。" +msgstr "æ¯ä¸ªç²’å的轨é“速度将跟éšè¿™ä¸ª [Curve] å˜åŒ–。" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml @@ -21661,7 +21664,7 @@ msgstr "径å‘åŠ é€Ÿåº¦åº”ç”¨äºŽæ¯ä¸ªç²’å。使粒ååŠ é€Ÿè¿œç¦»åŽŸç‚¹ã€‚" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "Each particle's radial acceleration will vary along this [Curve]." -msgstr "æ¯ä¸ªç²’å的径å‘åŠ é€Ÿåº¦å°†æ²¿æ¤ [Curve] å˜åŒ–。" +msgstr "æ¯ä¸ªç²’å的径å‘åŠ é€Ÿåº¦å°†è·Ÿéšè¿™ä¸ª [Curve] å˜åŒ–。" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml @@ -21676,31 +21679,31 @@ msgstr "å‘射寿命éšæœºçŽ‡ã€‚" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml msgid "Initial scale applied to each particle." -msgstr "åˆå§‹æ¯”例应用于æ¯ä¸ªç²’å。" +msgstr "æ¯ä¸ªç²’åçš„åˆå§‹ç¼©æ”¾ã€‚" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "Each particle's scale will vary along this [Curve]." -msgstr "æ¯ä¸ªç²’å的比例将éšç€ [Curve] çš„å˜åŒ–而å˜åŒ–。" +msgstr "æ¯ä¸ªç²’å的缩放将跟éšè¿™ä¸ª [Curve] å˜åŒ–。" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml msgid "Scale randomness ratio." -msgstr "æ ‡åº¦éšæœºçŽ‡ã€‚" +msgstr "缩放éšæœºçŽ‡ã€‚" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/Particles2D.xml msgid "" "Particle system's running speed scaling ratio. A value of [code]0[/code] can " "be used to pause the particles." -msgstr "ç²’å系统的è¿è¡Œé€Ÿåº¦ç¼©æ”¾æ¯”例。值[code]0[/code]å¯ç”¨äºŽæš‚åœç²’å。" +msgstr "ç²’å系统的è¿è¡Œé€Ÿåº¦ç¼©æ”¾æ¯”例。将值设为 [code]0[/code] å¯ç”¨äºŽæš‚åœç²’å。" #: doc/classes/CPUParticles.xml msgid "" "Each particle's initial direction range from [code]+spread[/code] to [code]-" "spread[/code] degrees. Applied to X/Z plane and Y/Z planes." msgstr "" -"æ¯ä¸ªç²’åçš„åˆå§‹æ–¹å‘范围为[code]+spread[/code]至[code]-spread[/code]度。适用于" -"X/Zå¹³é¢å’ŒY/Zå¹³é¢ã€‚" +"æ¯ä¸ªç²’åçš„åˆå§‹æ–¹å‘范围为 [code]+spread[/code] 至 [code]-spread[/code] 度。适" +"用于 X/Z å¹³é¢å’Œ Y/Z å¹³é¢ã€‚" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml @@ -21713,7 +21716,7 @@ msgstr "" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml msgid "Each particle's tangential acceleration will vary along this [Curve]." -msgstr "æ¯ä¸ªç²’å的切å‘åŠ é€Ÿåº¦å°†æ²¿æ¤ [Curve] å˜åŒ–。" +msgstr "æ¯ä¸ªç²’å的切å‘åŠ é€Ÿåº¦å°†è·Ÿéšè¿™ä¸ª [Curve] å˜åŒ–。" #: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml #: doc/classes/ParticlesMaterial.xml @@ -21932,23 +21935,23 @@ msgstr "æ¯ä¸ªç²’åçš„åˆå§‹é¢œè‰²ã€‚如果定义了 [member texture],它将ä msgid "" "Each particle's color will vary along this [Gradient] (multiplied with " "[member color])." -msgstr "æ¯ä¸ªç²’å的颜色将éšç€è¿™ä¸ª [Gradient] å˜åŒ–,å³ä¸Ž [member color] 相乘。" +msgstr "æ¯ä¸ªç²’å的颜色将éšç€è¿™ä¸ª [Gradient] å˜åŒ–(与 [member color] 相乘)。" #: doc/classes/CPUParticles2D.xml msgid "" "The rectangle's extents if [member emission_shape] is set to [constant " "EMISSION_SHAPE_RECTANGLE]." msgstr "" -"如果 [member emission_shape] 设置为 [constant EMISSION_SHAPE_RECTANGLE],则矩" -"形的范围。" +"[member emission_shape] 设置为 [constant EMISSION_SHAPE_RECTANGLE] 时,该矩形" +"的范围。" #: doc/classes/CPUParticles2D.xml msgid "" "The sphere's radius if [member emission_shape] is set to [constant " "EMISSION_SHAPE_SPHERE]." msgstr "" -"如果 [member emission_shape] 设置为 [constant EMISSION_SHAPE_SPHERE],则çƒä½“" -"çš„åŠå¾„。" +"[member emission_shape] 设置为 [constant EMISSION_SHAPE_SPHERE] 时,该çƒä½“çš„" +"åŠå¾„。" #: doc/classes/CPUParticles2D.xml doc/classes/Particles.xml #: doc/classes/Particles2D.xml @@ -22070,7 +22073,7 @@ msgstr "" " key.save(\"user://generated.key\")\n" " cert.save(\"user://generated.crt\")\n" " # åŠ å¯†\n" -" var data = \"Some data\"\n" +" var data = \"具体的数æ®\"\n" " var encrypted = crypto.encrypt(key, data.to_utf8())\n" " # 解密\n" " var decrypted = crypto.decrypt(key, encrypted)\n" @@ -24229,9 +24232,12 @@ msgstr "" "æ¢çš„世界空间åæ ‡ï¼ˆåŽŸç‚¹ï¼‰ä¼šè¢«å¿½ç•¥ã€‚åªä¼šç”¨åŸºæ¥ç¡®å®šå…‰çº¿çš„æ–¹å‘。" #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" "远处阴影分裂的é¢å¤–åç½®é‡ã€‚如果自身阴影åªäº§ç”Ÿè¿œå¤„çš„åˆ†è£‚ï¼Œå¢žåŠ è¿™ä¸ªå€¼å¯ä»¥ä¿®å¤å®ƒ" "们。" @@ -24239,9 +24245,10 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" -"如果为 [code]true[/code],则会牺牲阴影细节,以æ¢å–更平滑的分割之间的过渡。" #: doc/classes/DirectionalLight.xml msgid "" @@ -24250,8 +24257,12 @@ msgid "" msgstr "优化阴影渲染的细节与è¿åŠ¨ã€‚è§ [enum ShadowDepthRange]。" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." -msgstr "阴影分割的最大è·ç¦»ã€‚" +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." +msgstr "" #: doc/classes/DirectionalLight.xml msgid "The light's shadow rendering algorithm. See [enum ShadowMode]." @@ -24264,32 +24275,35 @@ msgid "" msgstr "当物体垂直于光线时,å¯ç”¨äºŽä¿®å¤è‡ªèº«é˜´å½±çš„特殊情况。" #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" "相机到影å分割1çš„è·ç¦»ã€‚相对于[member directional_shadow_max_distance]。åªæœ‰å½“" "[member directional_shadow_mode]是[code]SHADOW_PARALLEL_2_SPLITS[/code]或" "[code]SHADOW_PARALLEL_4_SPLITS[/code]æ—¶æ‰ä½¿ç”¨ã€‚" #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" "阴影分割1到分割2çš„è·ç¦»ã€‚相对于[member directional_shadow_max_distance]。仅在" "[member directional_shadow_mode]为[code]SHADOW_PARALLEL_2_SPLITS[/code]或" "[code]SHADOW_PARALLEL_4_SPLITS[/code]时使用。" #: doc/classes/DirectionalLight.xml +#, fuzzy msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" "从影å分割2到分割3çš„è·ç¦»ã€‚相对于[member directional_shadow_max_distance]。åª" "有当[member directional_shadow_mode]为[code]SHADOW_PARALLEL_4_SPLITS[/code]æ—¶" @@ -24905,9 +24919,9 @@ msgid "" "control whose size changes over time, unless a pixel art aesthetic is " "desired." msgstr "" -"为 [code]true[/code] 时将使用过滤功能。如果å—ä½“è¿‡åº¦é‡‡æ ·è¢«ç¦ç”¨æˆ–æ— æ•ˆï¼Œè¿™å°†ä½¿å—" -"体在缩放时å˜å¾—模糊,而éžåƒç´ 化。当在尺寸éšæ—¶å˜åŒ–的控件ä¸ä½¿ç”¨å—体时,建议å¯ç”¨" -"这个功能,除éžæ˜¯åƒç´ 设计。" +"如果为 [code]true[/code],将使用过滤功能。如果å—ä½“è¿‡åº¦é‡‡æ ·è¢«ç¦ç”¨æˆ–æ— æ•ˆï¼Œè¿™å°†" +"使å—体在缩放时å˜å¾—模糊,而éžåƒç´ 化。当在尺寸éšæ—¶å˜åŒ–的控件ä¸ä½¿ç”¨å—体时,建议" +"å¯ç”¨è¿™ä¸ªåŠŸèƒ½ï¼Œé™¤éžæ˜¯åƒç´ 设计。" #: doc/classes/DynamicFont.xml msgid "" @@ -24915,8 +24929,8 @@ msgid "" "appearance when downscaling it if font oversampling is disabled or " "ineffective." msgstr "" -"为 [code]true[/code] 时将使用 mipmap 多级æ¸è¿œçº¹ç†ã€‚在å—ä½“è¿‡åº¦é‡‡æ ·è¢«ç¦ç”¨æˆ–æ— æ•ˆ" -"时,å¯æ”¹å–„å—体缩å°æ—¶çš„表现。" +"如果为 [code]true[/code],将使用 mipmap 多级æ¸è¿œçº¹ç†ã€‚在å—ä½“è¿‡åº¦é‡‡æ ·è¢«ç¦ç”¨æˆ–" +"æ— æ•ˆæ—¶ï¼Œå¯æ”¹å–„å—体缩å°æ—¶çš„表现。" #: doc/classes/DynamicFont.xml msgid "Spacing at the top." @@ -24950,8 +24964,8 @@ msgid "" "If [code]true[/code], the font is rendered with anti-aliasing. This property " "applies both to the main font and its outline (if it has one)." msgstr "" -"为 [code]true[/code] 时将以抗锯齿方å¼æ¸²æŸ“该å—体。æ¤å±žæ€§æ—¢é€‚用于主å—体,也适用" -"于其轮廓(如果有)。" +"如果为 [code]true[/code],将以抗锯齿方å¼æ¸²æŸ“该å—体。æ¤å±žæ€§æ—¢é€‚用于主å—体,也" +"适用于其轮廓(如果有)。" #: doc/classes/DynamicFontData.xml msgid "The path to the vector font file." @@ -26310,8 +26324,8 @@ msgid "" "If [code]true[/code], enables distraction-free mode which hides side docks " "to increase the space available for the main view." msgstr "" -"为 [code]true[/code] 时将å¯ç”¨ä¸“注模å¼ï¼Œè¯¥æ¨¡å¼ä¼šéšè—侧边é¢æ¿ï¼Œå¢žåŠ 主视图的å¯ç”¨" -"空间。" +"如果为 [code]true[/code],将å¯ç”¨ä¸“注模å¼ï¼Œè¯¥æ¨¡å¼ä¼šéšè—侧边é¢æ¿ï¼Œå¢žåŠ 主视图的" +"å¯ç”¨ç©ºé—´ã€‚" #: doc/classes/EditorPlugin.xml msgid "Used by the editor to extend its functionality." @@ -26325,7 +26339,7 @@ msgid "" "editor." msgstr "" "编辑器使用æ’件æ¥æ‰©å±•åŠŸèƒ½ã€‚最常è§çš„æ’件类型是编辑给定的节点或资æºç±»åž‹ã€å¯¼å…¥æ’" -"件和导出æ’件。å¦è¯·å‚阅[EditorScript]å‘ç¼–è¾‘å™¨æ·»åŠ å‡½æ•°ã€‚" +"件和导出æ’件。å¦è¯·å‚阅 [EditorScript] å‘ç¼–è¾‘å™¨æ·»åŠ å‡½æ•°ã€‚" #: doc/classes/EditorPlugin.xml msgid "" @@ -26344,7 +26358,7 @@ msgstr "" "å°†æŽ§ä»¶æ·»åŠ åˆ°åº•éƒ¨é¢æ¿ï¼ˆåŒ…å«â€œè¾“出â€â€œè°ƒè¯•â€â€œåŠ¨ç”»â€ç‰ï¼‰ã€‚è¿”å›žå¯¹æ·»åŠ çš„æŒ‰é’®çš„å¼•ç”¨ã€‚æ‚¨" "å¯ä»¥æ ¹æ®éœ€è¦éšè—/显示按钮。åœç”¨æ’件åŽï¼Œè¯·ç¡®ä¿ä½¿ç”¨ [method " "remove_control_from_bottom_panel] 移除自定义控件,并使用 [method Node." -"queue_free] 释放。" +"queue_free] 将其释放。" #: doc/classes/EditorPlugin.xml msgid "" @@ -26357,11 +26371,11 @@ msgid "" "with [method remove_control_from_container] and free it with [method Node." "queue_free]." msgstr "" -"å°†è‡ªå®šä¹‰æŽ§ä»¶æ·»åŠ åˆ°å®¹å™¨ä¸ï¼ˆå‚阅 [enum CustomControlContainer])。在编辑器用户" -"ç•Œé¢ä¸ï¼Œæœ‰è®¸å¤šä½ç½®å¯ä»¥æ·»åŠ 自定义控件。\n" +"å°†è‡ªå®šä¹‰æŽ§ä»¶æ·»åŠ åˆ°å®¹å™¨ä¸ï¼ˆè§ [enum CustomControlContainer])。在编辑器用户界" +"é¢ä¸ï¼Œæœ‰è®¸å¤šä½ç½®å¯ä»¥æ·»åŠ 自定义控件。\n" "请记ä½ï¼Œæ‚¨å¿…须自己管ç†æ‚¨çš„自定义控件的å¯è§æ€§ï¼ˆå¹¶ä¸”很å¯èƒ½åœ¨æ·»åŠ åŽéšè—它)。\n" -"å½“ä½ çš„æ’件åœç”¨æ—¶ï¼Œè¯·ç¡®ä¿ä½¿ç”¨ [method remove_control_from_container] åˆ é™¤ä½ çš„" -"自定义控件,并使用 [method Node.queue_free] 释放它。" +"å½“ä½ çš„æ’件被åœç”¨æ—¶ï¼Œè¯·ç¡®ä¿ä½¿ç”¨ [method remove_control_from_container] åˆ é™¤ä½ " +"的自定义控件,并使用 [method Node.queue_free] 将其释放。" #: doc/classes/EditorPlugin.xml msgid "" @@ -26535,7 +26549,7 @@ msgstr "" msgid "" "Called by the engine when the user disables the [EditorPlugin] in the Plugin " "tab of the project settings window." -msgstr "当用户在项目设置窗å£çš„æ’件选项å¡ä¸ç¦ç”¨[EditorPlugin]时,由引擎调用。" +msgstr "当用户在项目设置窗å£çš„æ’件选项å¡ä¸ç¦ç”¨ [EditorPlugin] 时,由引擎调用。" #: doc/classes/EditorPlugin.xml msgid "" @@ -26569,8 +26583,8 @@ msgid "" " return false\n" "[/codeblock]" msgstr "" -"当2D编辑器的视窗被更新时,由引擎调用。使用 [code]overlay[/code] [Control] è¿›" -"è¡Œç»˜åˆ¶ã€‚ä½ å¯ä»¥é€šè¿‡è°ƒç”¨ [method update_overlays] 手动更新视窗。\n" +"引擎会在 2D 编辑器的视区å‘生更新时调用。使用 [code]overlay[/code] [Control] " +"è¿›è¡Œç»˜åˆ¶ã€‚ä½ å¯ä»¥é€šè¿‡è°ƒç”¨ [method update_overlays] 手动更新视窗。\n" "[codeblock]\n" "func forward_canvas_draw_over_viewport(overlay):\n" " # åœ¨å…‰æ ‡ä½ç½®ç”»ä¸€ä¸ªåœ†ã€‚\n" @@ -26661,7 +26675,7 @@ msgid "" " return false\n" "[/codeblock]" msgstr "" -"当3D编辑器的视窗被更新时,由引擎调用。使用 [code]overlay[/code] 控件 " +"引擎会在 3D 编辑器的视区å‘生更新时调用。使用 [code]overlay[/code] 控件 " "[Control] è¿›è¡Œç»˜åˆ¶ã€‚ä½ å¯ä»¥é€šè¿‡è°ƒç”¨ [method update_overlays] 更新覆盖手动更新" "视窗。\n" "[codeblock]\n" @@ -26993,9 +27007,9 @@ msgid "" "inside [method forward_spatial_gui_input]. It might be especially usable if " "your plugin will want to use raycast in the scene." msgstr "" -"å¦‚æžœä½ æƒ³åœ¨[method forward_spatial_gui_input]里é¢æŽ¥æ”¶æ¥è‡ª3D视图å±å¹•çš„输入,请" -"ä½¿ç”¨è¿™ä¸ªæ–¹æ³•ã€‚å¦‚æžœä½ çš„æ’件想è¦åœ¨åœºæ™¯ä¸ä½¿ç”¨å…‰çº¿å¹¿æ’,那么这个方法å¯èƒ½ç‰¹åˆ«æœ‰" -"用。" +"å¦‚æžœä½ æƒ³åœ¨ [method forward_spatial_gui_input] 里é¢æŽ¥æ”¶æ¥è‡ª 3D 视图å±å¹•çš„输" +"å…¥ï¼Œè¯·ä½¿ç”¨è¿™ä¸ªæ–¹æ³•ã€‚å¦‚æžœä½ çš„æ’件想è¦åœ¨åœºæ™¯ä¸ä½¿ç”¨å…‰çº¿æŠ•å°„,那么这个方法å¯èƒ½ç‰¹" +"别有用。" #: doc/classes/EditorPlugin.xml msgid "" @@ -28874,7 +28888,7 @@ msgid "" "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." msgstr "" -"为 [code]true[/code] 时表示该脚本目å‰æ£åœ¨ç¼–辑器内è¿è¡Œã€‚这对 [code]tool[/" +"如果为 [code]true[/code],表示该脚本目å‰æ£åœ¨ç¼–辑器内è¿è¡Œã€‚这对 [code]tool[/" "code] 脚本很有用,å¯ä»¥åœ¨ç‰¹å®šæ¡ä»¶ä¸‹ç»˜åˆ¶ç¼–辑器辅助内容,或者防æ¢åœ¨ç¼–辑器ä¸æ„外" "地è¿è¡Œä¼šå½±å“场景状æ€çš„“游æˆâ€ä»£ç 。\n" "[codeblock]\n" @@ -37613,6 +37627,7 @@ msgid "Controls the mouse mode. See [enum MouseMode] for more information." msgstr "æŽ§åˆ¶é¼ æ ‡æ¨¡å¼ã€‚详情请å‚阅 [enum MouseMode]。" #: doc/classes/Input.xml +#, fuzzy msgid "" "If [code]true[/code], similar input events sent by the operating system are " "accumulated. When input accumulation is enabled, all input events generated " @@ -37623,7 +37638,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" "如果为 [code]true[/code],会对æ“作系统å‘é€çš„类似输入事件进行累积。当å¯ç”¨è¾“å…¥" "累积时,在一帧ä¸äº§ç”Ÿçš„所有输入事件将被åˆå¹¶ï¼Œå¹¶åœ¨è¯¥å¸§å®Œæˆæ¸²æŸ“æ—¶å‘å‡ºã€‚å› æ¤ï¼Œè¿™" @@ -38355,13 +38373,15 @@ msgid "Input event type for mouse motion events." msgstr "é¼ æ ‡ç§»åŠ¨äº‹ä»¶çš„è¾“å…¥äº‹ä»¶ç±»åž‹ã€‚" #: doc/classes/InputEventMouseMotion.xml +#, fuzzy msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -38763,6 +38783,12 @@ msgid "" msgstr "如果为 [code]true[/code]ï¼Œå¹¶ä¸”è®¾ç½®äº†ç›®æ ‡ï¼Œç›¸æœºå°†è‡ªåŠ¨ç§»åŠ¨ã€‚" #: doc/classes/InterpolatedCamera.xml +#, fuzzy +msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "相机的过程回调。请å‚阅[enum Camera2DProcessMode]。" + +#: doc/classes/InterpolatedCamera.xml msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." @@ -45389,7 +45415,7 @@ msgstr "" "å…许代ç†å离ç†æƒ³è·¯å¾„的最大è·ç¦»ã€‚å¯èƒ½ä¸ºäº†é˜²æ’žè€Œäº§ç”Ÿå离。超出最大è·ç¦»æ—¶ï¼Œä¼šé‡" "新计算ç†æƒ³è·¯å¾„。" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -45522,6 +45548,14 @@ msgstr "" "ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationAgent2D] 所属的导航地图层。请求路径时,代ç†ä¼šå¿½ç•¥" "没有任何匹é…å±‚çš„å¯¼èˆªç½‘æ ¼ã€‚" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "用于模拟å¯æ¥è¡ŒåŒºåŸŸå’Œéšœç¢ç‰©çš„ç½‘æ ¼ã€‚" @@ -51787,8 +51821,8 @@ msgid "" "Shows all resources in the game. Optionally, the list can be written to a " "file by specifying a file path in [code]tofile[/code]." msgstr "" -"显示游æˆä¸çš„所有资æºã€‚也å¯ä»¥é€šè¿‡åœ¨[code]tofile[/code]ä¸æŒ‡å®šæ–‡ä»¶è·¯å¾„将该列表写" -"入文件。" +"显示游æˆä¸çš„所有资æºã€‚也å¯ä»¥é€šè¿‡åœ¨ [code]tofile[/code] ä¸æŒ‡å®šæ–‡ä»¶è·¯å¾„将该列表" +"写入文件。" #: doc/classes/OS.xml msgid "Shows the list of loaded textures sorted by size in memory." @@ -51808,16 +51842,17 @@ msgid "" "Windows or bounce the dock icon on OSX.\n" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" -"è¦æ±‚用户注æ„该窗å£ã€‚它会在Windows上闪çƒä»»åŠ¡æ 按钮,或在OSX上弹出Dockå›¾æ ‡ã€‚\n" -"[b]注æ„:[/b]这个方法在Linuxã€macOSå’ŒWindows上实现。" +"è¦æ±‚用户注æ„该窗å£ã€‚它会在 Windows 上闪çƒä»»åŠ¡æ 按钮,或在 OSX 上让 Dock å›¾æ ‡" +"弹跳。\n" +"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml msgid "" "At the moment this function is only used by [code]AudioDriverOpenSL[/code] " "to request permission for [code]RECORD_AUDIO[/code] on Android." msgstr "" -"ç›®å‰ï¼Œè¿™ä¸ªå‡½æ•°åªè¢«[code]AudioDriverOpenSL[/code]用æ¥è¯·æ±‚Android上" -"[code]RECORD_AUDIO[/code]çš„æƒé™ã€‚" +"ç›®å‰ï¼Œè¿™ä¸ªå‡½æ•°åªè¢« [code]AudioDriverOpenSL[/code] 用æ¥è¯·æ±‚ Android 上 " +"[code]RECORD_AUDIO[/code] çš„æƒé™ã€‚" #: doc/classes/OS.xml msgid "" @@ -51826,9 +51861,9 @@ msgid "" "applications.\n" "[b]Note:[/b] This method is implemented on Android." msgstr "" -"é€šè¿‡è¿™ä¸ªåŠŸèƒ½ï¼Œä½ å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› 为在Android应用程åºä¸ï¼Œæ£å¸¸çš„æƒé™ä¼šåœ¨å®‰" +"ä½ å¯ä»¥é€šè¿‡è¿™ä¸ªå‡½æ•°ç”³è¯·å±é™©çš„æƒé™ï¼Œå› 为在 Android 应用程åºä¸ï¼Œæ£å¸¸çš„æƒé™ä¼šåœ¨å®‰" "装时自动授予。\n" -"[b]注æ„:[/b]æ¤æ–¹æ³•åœ¨Android上实现。" +"[b]注æ„:[/b]这个方法在 Android 上实现。" #: doc/classes/OS.xml msgid "" @@ -51875,15 +51910,15 @@ msgstr "" "应用程åºå¯ä»¥é€šè¿‡ä½¿ç”¨ [method get_ime_selection] å’Œ [method get_ime_text] 函数" "æ¥æ£€ç´¢ç»„åˆçŠ¶æ€ã€‚\n" "输入完æˆæ—¶æ交完æˆçš„组åˆå—符串。\n" -"[b]注æ„:[/b]该方法在 Linuxã€macOS å’Œ Windows 上实现。" +"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml 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 "" -"设置 IME 建议列表弹出窗å£çš„ä½ç½®ï¼ˆåœ¨çª—å£åæ ‡ä¸ï¼‰ã€‚\n" -"[b]注æ„:[/b]æ¤æ–¹æ³•åœ¨ Linuxã€macOS å’Œ Windows 上实现。" +"设置 IME 建议列表弹出窗å£çš„ä½ç½®ï¼ˆä½¿ç”¨çª—å£åæ ‡ï¼‰ã€‚\n" +"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml msgid "" @@ -51896,7 +51931,7 @@ msgstr "" "使用多尺寸平å°ç‰¹å®šå›¾æ ‡æ–‡ä»¶è®¾ç½®æ¸¸æˆçš„å›¾æ ‡ï¼ˆåœ¨ Windows 上是 [code]*.ico[/" "code],在 macOS 上是 [code]*.icns[/code])。\n" "适当的大å°åå›¾æ ‡ç”¨äºŽçª—å£æ ‡é¢˜ã€ä»»åŠ¡æ /程åºåžå’Œçª—å£é€‰æ‹©å¯¹è¯æ¡†ã€‚\n" -"[b]注æ„:[/b]æ¤æ–¹æ³•åœ¨ macOS å’Œ Windows 上实现。" +"[b]注æ„:[/b]这个方法在 macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml msgid "Sets the name of the current thread." @@ -51904,7 +51939,7 @@ msgstr "设置当å‰çº¿ç¨‹çš„å称。" #: doc/classes/OS.xml msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]." -msgstr "如果[code]enabled[/code]为 [code]true[/code],则å¯ç”¨å¤‡ä»½ä¿å˜ã€‚" +msgstr "如果 [code]enabled[/code] 为 [code]true[/code],则å¯ç”¨å¤‡ä»½ä¿å˜ã€‚" #: doc/classes/OS.xml msgid "" @@ -51912,7 +51947,7 @@ msgid "" "[b]Note:[/b] This method is implemented on Linux, macOS and Windows." msgstr "" "设置窗å£æ˜¯å¦åº”始终ä½äºŽé¡¶éƒ¨ã€‚\n" -"[b]注æ„:[/b]该方法在 Linuxã€macOS å’Œ Windows 上实现。" +"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml msgid "" @@ -51937,18 +51972,18 @@ msgstr "" "设置窗å£çš„一个接å—é¼ æ ‡äº‹ä»¶çš„å¤šè¾¹å½¢åŒºåŸŸã€‚è¯¥åŒºåŸŸå¤–çš„é¼ æ ‡äº‹ä»¶å°†è¢«ä¼ é€’å‡ºåŽ»ã€‚\n" "ä¼ é€’ä¸€ä¸ªç©ºæ•°ç»„å°†ç¦ç”¨ç©¿é€æ”¯æŒï¼ˆæ‰€æœ‰é¼ æ ‡äº‹ä»¶å°†è¢«çª—å£æ‹¦æˆªï¼Œè¿™æ˜¯é»˜è®¤è¡Œä¸ºï¼‰ã€‚\n" "[codeblock]\n" -"# 设置区域,使用Path2D节点。\n" -"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points() )\n" +"# 设置区域,使用 Path2D 节点。\n" +"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points())\n" "\n" -"# 设置区域,使用Polygon2D节点。\n" +"# 设置区域,使用 Polygon2D 节点。\n" "OS.set_window_mouse_passthrough($Polygon2D.polygon)\n" "\n" "# é‡ç½®åŒºåŸŸä¸ºé»˜è®¤å€¼ã€‚\n" -"OS.set_window_mouse_passthrough([] )\n" +"OS.set_window_mouse_passthrough([])\n" "[/codeblock]\n" -"[b]注æ„:[/b]在Windows上,ä½äºŽåŒºåŸŸå¤–的窗å£éƒ¨åˆ†ä¸ä¼šè¢«ç»˜åˆ¶ï¼Œè€Œåœ¨Linuxå’ŒmacOS上" -"则会。\n" -"[b]注æ„:[/b]这个方法在Linuxã€macOSå’ŒWindows上实现。" +"[b]注æ„:[/b]在 Windows 上,ä½äºŽåŒºåŸŸå¤–的窗å£éƒ¨åˆ†ä¸ä¼šè¢«ç»˜åˆ¶ï¼Œè€Œåœ¨ Linux å’Œ " +"macOS 上则会。\n" +"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml msgid "" @@ -51960,7 +51995,7 @@ msgstr "" "将窗å£æ ‡é¢˜è®¾ç½®ä¸ºæŒ‡å®šçš„å—符串。\n" "[b]注æ„:[/b]应该å¶å°”使用,ä¸è¦æ¯å¸§éƒ½è®¾ç½®ï¼Œå› 为这会对æŸäº›çª—å£ç®¡ç†å™¨çš„性能产生" "è´Ÿé¢å½±å“。\n" -"[b]注æ„:[/b]该方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。" +"[b]注æ„:[/b]这个方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml msgid "" @@ -51991,7 +52026,7 @@ msgstr "" "[code]mailto[/code] URL 方案[/url]。\n" "å¯ä»¥ä½¿ç”¨ [method ProjectSettings.globalize_path] å°† [code]res://[/code] å’Œ " "[code]user://[/code] 路径转æ¢ä¸ºæœ¬æ–¹æ³•æ‰€ä½¿ç”¨çš„系统路径。\n" -"[b]注æ„:[/b]本方法在 Androidã€iOSã€HTML5ã€Linuxã€macOSã€ä»¥åŠ Windows 上实" +"[b]注æ„:[/b]这个方法在 Androidã€iOSã€HTML5ã€Linuxã€macOSã€ä»¥åŠ Windows 上实" "现。" #: doc/classes/OS.xml @@ -52011,7 +52046,7 @@ msgstr "" "测)。\n" "需è¦æŠŠ [code]multiline[/code] å‚数设置为 [code]true[/code] æ‰èƒ½è¾“入多行文本," "如在 [TextEdit] ä¸ã€‚\n" -"[b]注æ„:[/b]æ¤æ–¹æ³•åœ¨ Androidã€iOS å’Œ UWP 上实现。" +"[b]注æ„:[/b]这个方法在 Androidã€iOS å’Œ UWP 上实现。" #: doc/classes/OS.xml msgid "The clipboard from the host OS. Might be unavailable on some platforms." @@ -52330,27 +52365,27 @@ msgstr "" #: doc/classes/OS.xml msgid "Landscape screen orientation." -msgstr "横å‘å±å¹•æ–¹å‘。" +msgstr "横å±æ–¹å‘。" #: doc/classes/OS.xml msgid "Portrait screen orientation." -msgstr "纵å‘å±å¹•æ–¹å‘。" +msgstr "ç«–å±æ–¹å‘。" #: doc/classes/OS.xml msgid "Reverse landscape screen orientation." -msgstr "å转横å‘å±å¹•æ–¹å‘。" +msgstr "倒横å±æ–¹å‘。" #: doc/classes/OS.xml msgid "Reverse portrait screen orientation." -msgstr "å转纵å‘å±å¹•æ–¹å‘。" +msgstr "倒竖å±æ–¹å‘。" #: doc/classes/OS.xml msgid "Uses landscape or reverse landscape based on the hardware sensor." -msgstr "æ ¹æ®ç¡¬ä»¶ä¼ 感器使用横å‘或åå‘横å‘。" +msgstr "æ ¹æ®ç¡¬ä»¶ä¼ 感器使用横å±æˆ–倒横å±æ–¹å‘。" #: doc/classes/OS.xml msgid "Uses portrait or reverse portrait based on the hardware sensor." -msgstr "æ ¹æ®ç¡¬ä»¶ä¼ 感器使用纵å‘或åå‘纵å‘。" +msgstr "æ ¹æ®ç¡¬ä»¶ä¼ 感器使用竖å±æˆ–倒竖å±ã€‚" #: doc/classes/OS.xml msgid "Uses most suitable orientation based on the hardware sensor." @@ -52542,7 +52577,7 @@ msgstr "" #: doc/classes/PackedScene.xml msgid "If passed to [method instance], blocks edits to the scene state." -msgstr "å¦‚æžœä¼ é€’ç»™[method instance],则阻æ¢å¯¹åœºæ™¯çŠ¶æ€çš„编辑。" +msgstr "å¦‚æžœä¼ é€’ç»™ [method instance],则阻æ¢å¯¹åœºæ™¯çŠ¶æ€çš„编辑。" #: doc/classes/PackedScene.xml msgid "" @@ -52561,7 +52596,7 @@ msgid "" msgstr "" "å¦‚æžœä¼ é€’ç»™ [method instance],å‘本地场景æ供本地场景资æºã€‚åªæœ‰ä¸»åœºæ™¯åº”该接收" "主编辑状æ€ã€‚\n" -"[b]注æ„:[/b]åªåœ¨ç¼–辑器构建ä¸å¯ç”¨ã€‚" +"[b]注æ„:[/b]仅在编辑器构建ä¸å¯ç”¨ã€‚" #: doc/classes/PackedScene.xml msgid "" @@ -52653,10 +52688,10 @@ 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 "" -"[i]已废弃。[/i] ä½ åº”è¯¥ä½¿ç”¨ [code]get_var[/code] å’Œ [code]put_var[/code] å‚æ•°" -"æ¥ä»£æ›¿å®ƒã€‚\n" -"如果为 [code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç 和解" -"ç 。\n" +"[i]已废弃。[/i]ä½ åº”è¯¥ä½¿ç”¨ [code]get_var[/code] å’Œ [code]put_var[/code] å‚æ•°æ¥" +"代替它。\n" +"如果为 [code]true[/code]ï¼Œå¤šäººæ¸¸æˆ API å°†å…许在 RPC/RSET 期间对对象进行编ç å’Œ" +"解ç 。\n" "[b]è¦å‘Šï¼š[/b]ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç 。如果åºåˆ—化的对象æ¥è‡ªä¸å—ä¿¡" "任的æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚远程代ç 执行。" @@ -52739,17 +52774,17 @@ msgstr "表示当å‰æ£åœ¨ä¸Žè¿œç¨‹å¯¹ç‰æ–¹è¿›è¡Œæ¡æ‰‹çš„ [PacketPeerDTLS] çš„ #: doc/classes/PacketPeerDTLS.xml msgid "" "A status representing a [PacketPeerDTLS] that is connected to a remote peer." -msgstr "表示连接到远程对ç‰æ–¹çš„[PacketPeerDTLS]的状æ€ã€‚" +msgstr "表示连接到远程对ç‰æ–¹çš„ [PacketPeerDTLS] 的状æ€ã€‚" #: doc/classes/PacketPeerDTLS.xml msgid "A status representing a [PacketPeerDTLS] in a generic error state." -msgstr "表示处于一般错误状æ€çš„[PacketPeerDTLS]的状æ€ã€‚" +msgstr "表示处于一般错误状æ€çš„ [PacketPeerDTLS] 的状æ€ã€‚" #: doc/classes/PacketPeerDTLS.xml msgid "" "An error status that shows a mismatch in the DTLS certificate domain " "presented by the host and the domain requested for validation." -msgstr "显示主机æ供的DTLSè¯ä¹¦åŸŸä¸Žè¯·æ±‚验è¯çš„域ä¸åŒ¹é…的错误状æ€ã€‚" +msgstr "显示主机æ供的 DTLS è¯ä¹¦åŸŸä¸Žè¯·æ±‚验è¯çš„域ä¸åŒ¹é…的错误状æ€ã€‚" #: doc/classes/PacketPeerStream.xml msgid "Wrapper to use a PacketPeer over a StreamPeer." @@ -52768,16 +52803,16 @@ msgstr "" #: doc/classes/PacketPeerStream.xml msgid "The wrapped [StreamPeer] object." -msgstr "被·包装的[StreamPeer]对象。" +msgstr "被包装的 [StreamPeer] 对象。" #: doc/classes/PacketPeerUDP.xml msgid "UDP packet peer." -msgstr "UDPæ•°æ®åŒ…客户端。" +msgstr "UDP æ•°æ®åŒ…客户端。" #: doc/classes/PacketPeerUDP.xml msgid "" "UDP packet peer. Can be used to send raw UDP packets as well as [Variant]s." -msgstr "UDPæ•°æ®åŒ…对ç‰ä½“。å¯ä»¥ç”¨æ¥å‘é€åŽŸå§‹çš„UDPæ•°æ®åŒ…以åŠ[Variant]。" +msgstr "UDP æ•°æ®åŒ…对ç‰ä½“。å¯ä»¥ç”¨æ¥å‘é€åŽŸå§‹çš„ UDP æ•°æ®åŒ…ä»¥åŠ [Variant]。" #: doc/classes/PacketPeerUDP.xml msgid "Closes the UDP socket the [PacketPeerUDP] is currently listening on." @@ -52905,9 +52940,9 @@ msgid "" "[b]Note:[/b] [method set_broadcast_enabled] must be enabled before sending " "packets to a broadcast address (e.g. [code]255.255.255.255[/code])." msgstr "" -"设置å‘é€æ•°æ®åŒ…å’Œå˜é‡çš„ç›®æ ‡åœ°å€å’Œç«¯å£ã€‚如果需è¦ï¼Œå°†ä½¿ç”¨DNS解æžä¸€ä¸ªä¸»æœºå。\n" +"设置å‘é€æ•°æ®åŒ…å’Œå˜é‡çš„ç›®æ ‡åœ°å€å’Œç«¯å£ã€‚如果需è¦ï¼Œå°†ä½¿ç”¨ DNS 解æžä¸»æœºå。\n" "[b]注æ„:[/b]在å‘广æ’地å€ï¼ˆä¾‹å¦‚:[code]255.255.255.255[/code])å‘é€æ•°æ®åŒ…之" -"å‰ï¼Œå¿…é¡»å¯ç”¨[method set_broadcast_enabled]。" +"å‰ï¼Œå¿…é¡»å¯ç”¨ [method set_broadcast_enabled]。" #: doc/classes/PacketPeerUDP.xml msgid "" @@ -53047,8 +53082,8 @@ msgid "" "limit, the background will stop scrolling. Must be lower than [member " "scroll_limit_end] to work." msgstr "" -"开始滚动的左上角é™åˆ¶ã€‚如果相机超出这个é™åˆ¶ï¼ŒèƒŒæ™¯å°†åœæ¢æ»šåŠ¨ã€‚必须低于[member " -"scroll_limit_end]æ‰èƒ½å·¥ä½œã€‚" +"开始滚动的左上角é™åˆ¶ã€‚如果相机超出这个é™åˆ¶ï¼ŒèƒŒæ™¯å°†åœæ¢æ»šåŠ¨ã€‚必须低于 [member " +"scroll_limit_end] æ‰èƒ½å·¥ä½œã€‚" #: doc/classes/ParallaxBackground.xml msgid "" @@ -53056,8 +53091,8 @@ msgid "" "limit, the background will stop scrolling. Must be higher than [member " "scroll_limit_begin] to work." msgstr "" -"å³ä¸‹è§’é™åˆ¶æ»šåŠ¨ç»“æŸã€‚如果相机超出这个é™åˆ¶ï¼ŒèƒŒæ™¯å°†åœæ¢æ»šåŠ¨ã€‚必须高于[member " -"scroll_limit_begin]æ‰èƒ½å·¥ä½œã€‚" +"å³ä¸‹è§’é™åˆ¶æ»šåŠ¨ç»“æŸã€‚如果相机超出这个é™åˆ¶ï¼ŒèƒŒæ™¯å°†åœæ¢æ»šåŠ¨ã€‚必须高于 [member " +"scroll_limit_begin] æ‰èƒ½å·¥ä½œã€‚" #: doc/classes/ParallaxBackground.xml msgid "" @@ -53065,8 +53100,8 @@ msgid "" "[Camera2D], but can be used to manually manage scrolling when no camera is " "present." msgstr "" -"视差背景的滚动值。使用[Camera2D]时自动计算,但å¯ç”¨äºŽæ‰‹åŠ¨ç®¡ç†æ— æ‘„åƒå¤´æ—¶çš„滚" -"动。" +"视差背景的滚动值。使用 [Camera2D] 时会自动计算,但也å¯ç”¨äºŽæ‰‹åŠ¨ç®¡ç†æ— æ‘„åƒæœºæ—¶" +"的滚动。" #: doc/classes/ParallaxLayer.xml msgid "A parallax scrolling layer to be used with [ParallaxBackground]." @@ -53092,15 +53127,15 @@ msgid "" "scrolling background. If an axis is set to [code]0[/code], the [Texture] " "will not be mirrored." msgstr "" -"视差图层的[Texture]é•œåƒã€‚ç”¨äºŽåˆ›å»ºæ— é™æ»šåŠ¨çš„背景。如果一个轴被设置为[code]0[/" -"code],[Texture]å°†ä¸ä¼šè¢«é•œåƒã€‚" +"视差图层的 [Texture] é•œåƒã€‚ç”¨äºŽåˆ›å»ºæ— é™æ»šåŠ¨çš„背景。如果æŸä¸ªè½´è¢«è®¾ç½®ä¸º " +"[code]0[/code],[Texture] å°†ä¸ä¼šè¢«é•œåƒã€‚" #: doc/classes/ParallaxLayer.xml msgid "" "The ParallaxLayer's offset relative to the parent ParallaxBackground's " "[member ParallaxBackground.scroll_offset]." msgstr "" -"ParallaxLayer 相对于父 ParallaxBackground çš„åç§»é‡ [member " +"该 ParallaxLayer çš„å移é‡ï¼Œç›¸å¯¹äºŽçˆ¶ ParallaxBackground çš„ [member " "ParallaxBackground.scroll_offset]。" #: doc/classes/ParallaxLayer.xml @@ -62852,10 +62887,13 @@ msgid "" msgstr "阴影贴图的细分象é™å¤§å°ã€‚请å‚é˜…é˜´å½±æ˜ å°„æ–‡æ¡£ã€‚" #: doc/classes/ProjectSettings.xml +#, fuzzy msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." -msgstr "阴影图集的尺寸(用于 OmniLight å’Œ SpotLight)。è§æ–‡æ¡£ã€‚" +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." +msgstr "" +"设置阴影图集的图åƒå¤§å°ï¼ˆç”¨äºŽå…¨å‘光和èšå…‰ï¼‰ã€‚该值将被四èˆäº”入到最接近的 2 çš„" +"幂。" #: doc/classes/ProjectSettings.xml msgid "" @@ -64068,8 +64106,8 @@ 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] 的直线。它被用æ¥æŸ¥è¯¢2D" -"空间,以便沿ç€å°„线的路径找到最近的物体。\n" +"RayCast 表示一æ¡ä»ŽåŽŸç‚¹åˆ°ç›®æ ‡ä½ç½® [code]cast_to[/code] 的直线。它被用æ¥æŸ¥è¯¢ " +"2D 空间,以便沿ç€å°„线的路径找到最近的物体。\n" "RayCast2D å¯ä»¥å¿½ç•¥ä¸€äº›ç‰©ä½“,通过 [code]add_exception[/code] å°†å®ƒä»¬æ·»åŠ åˆ°å¼‚å¸¸" "列表ä¸ï¼Œé€šè¿‡è®¾ç½®ç¢°æ’žå±‚进行适当的过滤,或者通过类型掩ç 过滤物体类型。\n" "RayCast2D å¯ä»¥è¢«é…置为报告 [Area2D]([member collide_with_areas])和 " @@ -66926,11 +66964,12 @@ msgid "" "[code]body[/code] the [Node], if it exists in the tree, of the other " "[PhysicsBody2D] or [TileMap]." msgstr "" -"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]å‘生碰撞时触å‘。需è¦å°†[member " -"contact_monitor]设置为 [code]true[/code],并且将[member contacts_reported]设" -"置得足够高以检测所有的碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到[TileMap]" -"的。\n" -"[code]body[/code]是其他[PhysicsBody2D]或[TileMap]çš„[Node],如果它å˜åœ¨äºŽæ ‘ä¸ã€‚" +"当与å¦ä¸€ä¸ª [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 msgid "" @@ -67001,20 +67040,22 @@ msgid "" "RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node " "with [code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" -"当这个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]节点。" +"当这个 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 msgid "" @@ -67032,14 +67073,14 @@ msgstr "é™æ€æ¨¡å¼ã€‚物体的行为就åƒä¸€ä¸ª[StaticBody2D],ä¸ä¼šç§»åŠ¨ã msgid "" "Character mode. Similar to [constant MODE_RIGID], but the body can not " "rotate." -msgstr "角色模å¼ã€‚与[constant MODE_RIGID]类似,但主体ä¸èƒ½æ—‹è½¬ã€‚" +msgstr "角色模å¼ã€‚与 [constant MODE_RIGID] 类似,但主体ä¸èƒ½æ—‹è½¬ã€‚" #: doc/classes/RigidBody2D.xml msgid "" "Kinematic mode. The body behaves like a [KinematicBody2D], and must be moved " "by code." msgstr "" -"è¿åŠ¨å¦æ¨¡å¼ã€‚这个物体的行为就åƒä¸€ä¸ª[KinematicBody2D],必须通过代ç æ¥ç§»åŠ¨ã€‚" +"è¿åŠ¨å¦æ¨¡å¼ã€‚这个物体的行为就åƒä¸€ä¸ª [KinematicBody2D],必须通过代ç æ¥ç§»åŠ¨ã€‚" #: doc/classes/RigidBody2D.xml msgid "" @@ -67053,14 +67094,13 @@ msgstr "" msgid "" "Continuous collision detection enabled using raycasting. This is faster than " "shapecasting but less precise." -msgstr "使用射线投射å¯ç”¨è¿žç»ç¢°æ’žæ£€æµ‹ã€‚这比 shapecasting 快,但精度较低。" +msgstr "使用射线投射å¯ç”¨è¿žç»ç¢°æ’žæ£€æµ‹ã€‚这比形状投射快,但精度较低。" #: doc/classes/RigidBody2D.xml msgid "" "Continuous collision detection enabled using shapecasting. This is the " "slowest CCD method and the most precise." -msgstr "" -"使用 shapecasting å¯ç”¨è¿žç»ç¢°æ’žæ£€æµ‹ã€‚这是最慢的 CCD 方法,也是最精确的。" +msgstr "使用形状投射å¯ç”¨è¿žç»ç¢°æ’žæ£€æµ‹ã€‚这是最慢的 CCD 方法,也是最精确的。" #: doc/classes/Room.xml msgid "Room node, used to group objects together locally for [Portal] culling." @@ -67611,8 +67651,8 @@ msgid "" "scene as the result of [method PackedScene.get_state]." msgstr "" "维护一个与场景相关的资æºã€èŠ‚点ã€å¯¼å‡ºçš„å’Œé‡å†™çš„属性以åŠå†…置脚本的列表。\n" -"这个类ä¸èƒ½ç›´æŽ¥å®žä¾‹åŒ–,它是作为[method PackedScene.get_state]的结果为一个给定" -"的场景检索的。" +"这个类ä¸èƒ½ç›´æŽ¥å®žä¾‹åŒ–,它是作为 [method PackedScene.get_state] 的结果为一个给" +"定的场景检索的。" #: doc/classes/SceneState.xml msgid "" @@ -67640,7 +67680,7 @@ msgstr "" #: doc/classes/SceneState.xml msgid "Returns the method connected to the signal at [code]idx[/code]." -msgstr "返回连接到[code]idx[/code]处信å·çš„方法。" +msgstr "返回连接到 [code]idx[/code] 处信å·çš„方法。" #: doc/classes/SceneState.xml msgid "Returns the name of the signal at [code]idx[/code]." @@ -67720,9 +67760,9 @@ msgid "" "If [code]for_parent[/code] is [code]true[/code], returns the path of the " "[code]idx[/code] node's parent instead." msgstr "" -"返回 [code]idx[/code]处的节点的路径。\n" -"如果[code]for_parent[/code]是[code]true[/code],则返回 [code]idx[/code]节点的" -"父节点的路径。" +"返回 [code]idx[/code] 处的节点的路径。\n" +"如果 [code]for_parent[/code] 是 [code]true[/code],则返回 [code]idx[/code] 节" +"点的父节点的路径。" #: doc/classes/SceneState.xml msgid "" @@ -67757,8 +67797,8 @@ msgid "" "Returns [code]true[/code] if the node at [code]idx[/code] is an " "[InstancePlaceholder]." msgstr "" -"如果[code]idx[/code]处的节点是一个[InstancePlaceholder],返回 [code]true[/" -"code]。" +"如果 [code]idx[/code] 处的节点是一个 [InstancePlaceholder],则返回 " +"[code]true[/code]。" #: doc/classes/SceneState.xml msgid "" @@ -67958,7 +67998,7 @@ msgstr "è¿”å›žæ¤ [SceneTree] çš„ [member network_peer] çš„å”¯ä¸€å¯¹ç‰ ID。" #: doc/classes/SceneTree.xml msgid "Returns the number of nodes in this [SceneTree]." -msgstr "返回æ¤[SceneTree]ä¸çš„节点数。" +msgstr "è¿”å›žæ¤ [SceneTree] ä¸çš„节点数。" #: doc/classes/SceneTree.xml msgid "Returns a list of all nodes assigned to the given group." @@ -67974,7 +68014,7 @@ msgstr "" #: doc/classes/SceneTree.xml msgid "Returns the sender's peer ID for the most recently received RPC call." -msgstr "返回最近收到的RPC调用的å‘é€è€…的对ç‰ID。" +msgstr "返回最近收到的 RPC 调用的å‘é€è€…çš„å¯¹ç‰ ID。" #: doc/classes/SceneTree.xml msgid "Returns [code]true[/code] if the given group exists." @@ -68316,23 +68356,23 @@ msgstr "当 [SceneTree] 层次结构å‘生å˜åŒ–(移动或é‡å‘½åå项ç‰ï¼ #: doc/classes/SceneTree.xml msgid "Call a group with no flags (default)." -msgstr "è°ƒç”¨æ²¡æœ‰æ ‡å¿—çš„ç»„ï¼ˆé»˜è®¤ï¼‰ã€‚" +msgstr "对组进行调用时,ä¸ä½¿ç”¨æ ‡å¿—(默认)。" #: doc/classes/SceneTree.xml msgid "Call a group in reverse scene order." -msgstr "以相å的场景顺åºè°ƒç”¨ç»„。" +msgstr "对组进行调用时,使用逆场景åºã€‚" #: doc/classes/SceneTree.xml msgid "Call a group immediately (calls are normally made on idle)." -msgstr "ç«‹å³è°ƒç”¨ä¸€ä¸ªç»„(调用通常在空闲时进行)。" +msgstr "对组进行调用时,立å³æ‰§è¡Œï¼ˆæ£å¸¸æƒ…况下是在空闲时调用的)。" #: doc/classes/SceneTree.xml msgid "Call a group only once even if the call is executed many times." -msgstr "å³ä½¿è°ƒç”¨å¤šæ¬¡æ‰§è¡Œï¼Œä¹Ÿåªè°ƒç”¨ä¸€æ¬¡ç»„。" +msgstr "对组进行调用时,å³ä¾¿æ‰§è¡Œäº†å¤šæ¬¡è°ƒç”¨ä¹Ÿåªè°ƒç”¨ä¸€æ¬¡ã€‚" #: doc/classes/SceneTree.xml msgid "No stretching." -msgstr "未拉伸。" +msgstr "ä¸æ‹‰ä¼¸ã€‚" #: doc/classes/SceneTree.xml msgid "Render stretching in higher resolution (interpolated)." @@ -68342,7 +68382,7 @@ msgstr "以更高的分辨率渲染拉伸(æ’值)。" msgid "" "Keep the specified display resolution. No interpolation. Content may appear " "pixelated." -msgstr "ä¿æŒæŒ‡å®šçš„显示分辨率。没有æ’值。内容å¯èƒ½ä¼šå‡ºçŽ°åƒç´ 化。" +msgstr "ä¿æŒæŒ‡å®šçš„显示分辨率。ä¸åšæ’值。内容å¯èƒ½ä¼šå‡ºçŽ°åƒç´ 化。" #: doc/classes/SceneTree.xml msgid "" @@ -68360,13 +68400,13 @@ msgstr "在任æ„轴上用黑æ¡å¡«å……æ¥ä¿æŒç›¸åŒçš„长宽比。这å¯ä»¥é˜² msgid "" "Expand vertically. Left/right black bars may appear if the window is too " "wide." -msgstr "垂直展开。如果窗å£å¤ªå®½ï¼Œå¯èƒ½ä¼šå‡ºçŽ°å·¦/å³é»‘æ¡ã€‚" +msgstr "垂直扩展。如果窗å£å¤ªå®½ï¼Œå¯èƒ½ä¼šå‡ºçŽ°å·¦/å³é»‘æ¡ã€‚" #: doc/classes/SceneTree.xml msgid "" "Expand horizontally. Top/bottom black bars may appear if the window is too " "tall." -msgstr "水平展开。如果窗å£å¤ªé«˜ï¼Œå¯èƒ½ä¼šå‡ºçŽ°é¡¶éƒ¨/底部黑æ¡ã€‚" +msgstr "水平扩展。如果窗å£å¤ªé«˜ï¼Œå¯èƒ½ä¼šå‡ºçŽ°é¡¶éƒ¨/底部黑æ¡ã€‚" #: doc/classes/SceneTree.xml msgid "" @@ -68393,9 +68433,9 @@ msgid "" "The timer will be dereferenced after its time elapses. To preserve the " "timer, you can keep a reference to it. See [Reference]." msgstr "" -"ç”±åœºæ™¯æ ‘ç®¡ç†çš„一次性定时器,它在完æˆæ—¶å‘[signal timeout] ä¿¡å·ã€‚请å‚阅 " +"ç”±åœºæ™¯æ ‘ç®¡ç†çš„一次性定时器,它在完æˆæ—¶å‘ [signal timeout] ä¿¡å·ã€‚å¦è¯·å‚阅 " "[method SceneTree.create_timer]。\n" -"与 [Timer] 相å,它ä¸éœ€è¦å®žä¾‹åŒ–节点。常用于创建一次性的延迟定时器,如下é¢çš„例" +"与 [Timer] ä¸åŒï¼Œå®ƒä¸éœ€è¦å®žä¾‹åŒ–节点。常用于创建一次性的延迟定时器,如下é¢çš„例" "å:\n" "[codeblock]\n" "func some_function():\n" @@ -73594,9 +73634,32 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" -"æ ¼å¼åŒ–å—符串,将所有的 [code]placeholder[/code] 替æ¢ä¸º [code]values[/code]。" #: doc/classes/String.xml msgid "If the string is a valid file path, returns the base directory name." @@ -74414,13 +74477,12 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" -"使用具有给定 [RID] çš„ [CanvasItem] 绘制æ¤StyleBox。\n" -"您å¯ä»¥åœ¨ [CanvasItem] 派生节点上使用 [method Object.get_instance_id] èŽ·å– " -"[RID] 值。" #: doc/classes/StyleBox.xml msgid "Returns the size of this [StyleBox] without the margins." @@ -76272,6 +76334,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "为 [code]true[/code] æ—¶å³é”®å•å‡»ä¼šæ˜¾ç¤ºä¸Šä¸‹æ–‡èœå•ã€‚" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "如果为 [code]true[/code],则å¯ä»¥é€‰æ‹©å’Œç¼–辑该值。" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -83788,12 +83855,14 @@ msgid "The subdivision amount of the fourth quadrant on the shadow atlas." msgstr "阴影图集上第四象é™çš„细分é‡ã€‚" #: doc/classes/Viewport.xml +#, fuzzy msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" "阴影图集的分辨率(用于全å‘光和èšå…‰ï¼‰ã€‚该值将四èˆäº”入到最接近的 2 的幂。\n" "[b]注æ„:[/b]如果设置为 0,阴影将ä¸å¯è§ã€‚由于用户创建的视区默认值为 0ï¼Œå› æ¤å¿…" @@ -83830,8 +83899,12 @@ msgid "" msgstr "如果为 [code]true[/code],该视窗应使其背景渲染为é€æ˜Žã€‚" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." -msgstr "视窗的渲染模å¼ã€‚" +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." +msgstr "" #: doc/classes/Viewport.xml msgid "" diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po index 84b16d22a6..63312338fc 100644 --- a/doc/translations/zh_TW.po +++ b/doc/translations/zh_TW.po @@ -12257,10 +12257,12 @@ msgid "" msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_physics_process[/code] callback." msgstr "" #: doc/classes/Camera2D.xml doc/classes/ClippedCamera.xml +#: doc/classes/InterpolatedCamera.xml msgid "The camera updates with the [code]_process[/code] callback." msgstr "" @@ -19559,13 +19561,17 @@ msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "Amount of extra bias for shadow splits that are far away. If self-shadowing " -"occurs only on the splits far away, increasing this value can fix them." +"occurs only on the splits far away, increasing this value can fix them. This " +"is ignored when [member directional_shadow_mode] is [constant " +"SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "If [code]true[/code], shadow detail is sacrificed in exchange for smoother " -"transitions between splits." +"transitions between splits. Enabling shadow blend splitting also has a " +"moderate performance cost. This is ignored when [member " +"directional_shadow_mode] is [constant SHADOW_ORTHOGONAL]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19575,7 +19581,11 @@ msgid "" msgstr "" #: doc/classes/DirectionalLight.xml -msgid "The maximum distance for shadow splits." +msgid "" +"The maximum distance for shadow splits. Increasing this value will make " +"directional shadows visible from further away, at the cost of lower overall " +"shadow detail and performance (since more objects need to be included in the " +"directional shadow rendering)." msgstr "" #: doc/classes/DirectionalLight.xml @@ -19592,23 +19602,23 @@ msgstr "" msgid "" "The distance from camera to shadow split 1. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 1 to split 2. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_2_SPLITS[/code] or " -"[code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_2_SPLITS] or [constant " +"SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml msgid "" "The distance from shadow split 2 to split 3. Relative to [member " "directional_shadow_max_distance]. Only used when [member " -"directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]." +"directional_shadow_mode] is [constant SHADOW_PARALLEL_4_SPLITS]." msgstr "" #: doc/classes/DirectionalLight.xml @@ -29977,7 +29987,10 @@ msgid "" "input at the cost of increased CPU usage. In applications where drawing " "freehand lines is required, input accumulation should generally be disabled " "while the user is drawing the line to get results that closely follow the " -"actual input." +"actual input.\n" +"[b]Note:[/b] Input accumulation is [i]disabled[/i] by default for backward " +"compatibility reasons. It is however recommended to enable it for games " +"which don't require very reactive input, as this will decrease CPU usage." msgstr "" #: doc/classes/Input.xml @@ -30551,10 +30564,11 @@ msgstr "" msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" -"[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, set [member Input." -"use_accumulated_input] to [code]false[/code] to make events emitted as often " -"as possible. If you use InputEventMouseMotion to draw lines, consider " +"[b]Note:[/b] By default, this event can be emitted multiple times per frame " +"rendered, allowing for precise input reporting, at the expense of CPU usage. " +"You can set [member Input.use_accumulated_input] to [code]true[/code] to let " +"multiple events merge into a single emitted event per frame.\n" +"[b]Note:[/b] 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." @@ -30878,6 +30892,11 @@ msgstr "" #: doc/classes/InterpolatedCamera.xml msgid "" +"The camera's process callback. See [enum InterpolatedCameraProcessMode]." +msgstr "" + +#: doc/classes/InterpolatedCamera.xml +msgid "" "How quickly the camera moves toward its target. Higher values will result in " "tighter camera motion." msgstr "" @@ -36311,7 +36330,7 @@ msgid "" "maximum distance is exceeded, it recalculates the ideal path." msgstr "" -#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +#: doc/classes/NavigationAgent.xml msgid "" "The radius of the avoidance agent. This is the \"body\" of the avoidance " "agent and not the avoidance maneuver starting radius (which is controlled by " @@ -36424,6 +36443,14 @@ msgid "" "least one matching layer." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"The radius of the avoidance agent. This is the \"body\" of the avoidance " +"agent and not the avoidance maneuver starting radius (which is controlled by " +"[member neighbor_dist]).\n" +"Does not affect normal pathfinding." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -50041,8 +50068,8 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" -"Size for shadow atlas (used for OmniLights and SpotLights). See " -"documentation." +"Size for shadow atlas (used for OmniLights and SpotLights). The value will " +"be rounded up to the nearest power of 2. See shadow mapping documentation." msgstr "" #: doc/classes/ProjectSettings.xml @@ -58417,7 +58444,31 @@ msgstr "" #: doc/classes/String.xml msgid "" "Formats the string by replacing all occurrences of [code]placeholder[/code] " -"with [code]values[/code]." +"with the elements of [code]values[/code].\n" +"[code]values[/code] can be a [Dictionary] or an [Array]. Any underscores in " +"[code]placeholder[/code] will be replaced with the corresponding keys in " +"advance. Array elements use their index as keys.\n" +"[codeblock]\n" +"# Prints: Waiting for Godot is a play by Samuel Beckett, and Godot Engine is " +"named after it.\n" +"var use_array_values = \"Waiting for {0} is a play by {1}, and {0} Engine is " +"named after it.\"\n" +"print(use_array_values.format([\"Godot\", \"Samuel Beckett\"]))\n" +"\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {id} is {name}.\".format({\"id\": 42, \"name\": \"Godot\"}))\n" +"[/codeblock]\n" +"Some additional handling is performed when [code]values[/code] is an array. " +"If [code]placeholder[/code] does not contain an underscore, the elements of " +"the array will be used to replace one occurrence of the placeholder in turn; " +"If an array element is another 2-element array, it'll be interpreted as a " +"key-value pair.\n" +"[codeblock]\n" +"# Prints: User 42 is Godot.\n" +"print(\"User {} is {}.\".format([42, \"Godot\"], \"{}\"))\n" +"print(\"User {id} is {name}.\".format([[\"id\", 42], [\"name\", " +"\"Godot\"]]))\n" +"[/codeblock]" msgstr "" #: doc/classes/String.xml @@ -59014,9 +59065,11 @@ msgstr "" #: doc/classes/StyleBox.xml msgid "" -"Draws this stylebox using a [CanvasItem] with given [RID].\n" -"You can get a [RID] value using [method Object.get_instance_id] on a " -"[CanvasItem]-derived node." +"Draws this stylebox using a canvas item identified by the given [RID].\n" +"The [RID] value can either be the result of [method CanvasItem." +"get_canvas_item] called on an existing [CanvasItem]-derived node, or " +"directly from creating a canvas item in the [VisualServer] with [method " +"VisualServer.canvas_item_create]." msgstr "" #: doc/classes/StyleBox.xml @@ -60562,6 +60615,11 @@ msgid "If [code]true[/code], a right-click displays the context menu." msgstr "" #: doc/classes/TextEdit.xml +#, fuzzy +msgid "If [code]true[/code], allow drag and drop of selected text." +msgstr "回傳åƒæ•¸çš„餘弦值。" + +#: doc/classes/TextEdit.xml msgid "" "If [code]true[/code], the \"space\" character will have a visible " "representation." @@ -66655,9 +66713,10 @@ msgstr "" msgid "" "The shadow atlas' resolution (used for omni and spot lights). The value will " "be rounded up to the nearest power of 2.\n" -"[b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-" -"created viewports default to a value of 0, this value must be set above 0 " -"manually." +"[b]Note:[/b] If this is set to [code]0[/code], both point [i]and[/i] " +"directional shadows won't be visible. Since user-created viewports default " +"to a value of [code]0[/code], this value must be set above [code]0[/code] " +"manually (typically at least [code]256[/code])." msgstr "" #: doc/classes/Viewport.xml @@ -66686,7 +66745,11 @@ msgid "" msgstr "" #: doc/classes/Viewport.xml -msgid "The rendering mode of viewport." +msgid "" +"The rendering mode of viewport.\n" +"[b]Note:[/b] If set to [constant USAGE_2D] or [constant " +"USAGE_2D_NO_SAMPLING], [member hdr] will have no effect when enabled since " +"HDR is not supported for 2D." msgstr "" #: doc/classes/Viewport.xml diff --git a/drivers/gles3/environment/fog.cpp b/drivers/gles3/environment/fog.cpp new file mode 100644 index 0000000000..02d88f6871 --- /dev/null +++ b/drivers/gles3/environment/fog.cpp @@ -0,0 +1,66 @@ +/*************************************************************************/ +/* fog.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifdef GLES3_ENABLED + +#include "fog.h" + +using namespace GLES3; + +/* FOG */ + +RID Fog::fog_volume_allocate() { + return RID(); +} + +void Fog::fog_volume_initialize(RID p_rid) { +} + +void Fog::fog_free(RID p_rid) { +} + +void Fog::fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) { +} + +void Fog::fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) { +} + +void Fog::fog_volume_set_material(RID p_fog_volume, RID p_material) { +} + +AABB Fog::fog_volume_get_aabb(RID p_fog_volume) const { + return AABB(); +} + +RS::FogVolumeShape Fog::fog_volume_get_shape(RID p_fog_volume) const { + return RS::FOG_VOLUME_SHAPE_BOX; +} + +#endif // GLES3_ENABLED diff --git a/drivers/gles3/environment/fog.h b/drivers/gles3/environment/fog.h new file mode 100644 index 0000000000..22bf3bb017 --- /dev/null +++ b/drivers/gles3/environment/fog.h @@ -0,0 +1,62 @@ +/*************************************************************************/ +/* fog.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef FOG_GLES3_H +#define FOG_GLES3_H + +#ifdef GLES3_ENABLED + +#include "core/templates/local_vector.h" +#include "core/templates/rid_owner.h" +#include "core/templates/self_list.h" +#include "servers/rendering/environment/renderer_fog.h" + +namespace GLES3 { + +class Fog : public RendererFog { +public: + /* FOG VOLUMES */ + + virtual RID fog_volume_allocate() override; + virtual void fog_volume_initialize(RID p_rid) override; + virtual void fog_free(RID p_rid) override; + + virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) override; + virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) override; + virtual void fog_volume_set_material(RID p_fog_volume, RID p_material) override; + virtual AABB fog_volume_get_aabb(RID p_fog_volume) const override; + virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const override; +}; + +} // namespace GLES3 + +#endif // GLES3_ENABLED + +#endif // !FOG_GLES3_H diff --git a/drivers/gles3/environment/gi.cpp b/drivers/gles3/environment/gi.cpp index 98d698b2ae..84cdb81d35 100644 --- a/drivers/gles3/environment/gi.cpp +++ b/drivers/gles3/environment/gi.cpp @@ -126,13 +126,6 @@ bool GI::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const { return false; } -void GI::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) { -} - -float GI::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const { - return 0; -} - uint32_t GI::voxel_gi_get_version(RID p_voxel_gi) const { return 0; } diff --git a/drivers/gles3/environment/gi.h b/drivers/gles3/environment/gi.h index bff482d7fa..b633520784 100644 --- a/drivers/gles3/environment/gi.h +++ b/drivers/gles3/environment/gi.h @@ -86,9 +86,6 @@ public: virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override; virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override; - virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override; - virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override; - virtual uint32_t voxel_gi_get_version(RID p_voxel_gi) const override; }; diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index d41c844d1d..82f7450bc2 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -34,12 +34,12 @@ #include "core/os/os.h" #include "rasterizer_scene_gles3.h" -#include "rasterizer_storage_gles3.h" #include "core/config/project_settings.h" #include "servers/rendering/rendering_server_default.h" #include "storage/config.h" #include "storage/material_storage.h" +#include "storage/mesh_storage.h" #include "storage/texture_storage.h" #ifndef GLES_OVER_GL @@ -1416,9 +1416,8 @@ RasterizerCanvasGLES3 *RasterizerCanvasGLES3::get_singleton() { return singleton; } -RasterizerCanvasGLES3::RasterizerCanvasGLES3(RasterizerStorageGLES3 *p_storage) { +RasterizerCanvasGLES3::RasterizerCanvasGLES3() { singleton = this; - storage = p_storage; GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton(); GLES3::Config *config = GLES3::Config::get_singleton(); diff --git a/drivers/gles3/rasterizer_canvas_gles3.h b/drivers/gles3/rasterizer_canvas_gles3.h index bf13c91e1c..caf649aaf6 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.h +++ b/drivers/gles3/rasterizer_canvas_gles3.h @@ -34,7 +34,6 @@ #ifdef GLES3_ENABLED #include "rasterizer_scene_gles3.h" -#include "rasterizer_storage_gles3.h" #include "servers/rendering/renderer_canvas_render.h" #include "servers/rendering/renderer_compositor.h" #include "storage/material_storage.h" @@ -204,8 +203,6 @@ public: typedef void Texture; - RasterizerStorageGLES3 *storage = nullptr; - void canvas_begin(RID p_to_render_target, bool p_to_backbuffer); //virtual void draw_window_margins(int *black_margin, RID *black_image) override; @@ -260,7 +257,7 @@ public: void set_time(double p_time); static RasterizerCanvasGLES3 *get_singleton(); - RasterizerCanvasGLES3(RasterizerStorageGLES3 *p_storage); + RasterizerCanvasGLES3(); ~RasterizerCanvasGLES3(); }; diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index 78ffb42557..613a7f37d9 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "rasterizer_gles3.h" +#include "storage/utilities.h" #ifdef GLES3_ENABLED @@ -99,8 +100,9 @@ void RasterizerGLES3::begin_frame(double frame_step) { canvas->set_time(time_total); scene->set_time(time_total, frame_step); - storage->info.render_final = storage->info.render; - storage->info.render.reset(); + GLES3::Utilities *utilities = GLES3::Utilities::get_singleton(); + utilities->info.render_final = utilities->info.render; + utilities->info.render.reset(); //scene->iteration(); } @@ -197,14 +199,15 @@ void RasterizerGLES3::initialize() { void RasterizerGLES3::finalize() { memdelete(scene); memdelete(canvas); - memdelete(storage); memdelete(gi); + memdelete(fog); memdelete(copy_effects); memdelete(light_storage); memdelete(particles_storage); memdelete(mesh_storage); memdelete(material_storage); memdelete(texture_storage); + memdelete(utilities); memdelete(config); } @@ -265,6 +268,7 @@ RasterizerGLES3::RasterizerGLES3() { // OpenGL needs to be initialized before initializing the Rasterizers config = memnew(GLES3::Config); + utilities = memnew(GLES3::Utilities); texture_storage = memnew(GLES3::TextureStorage); material_storage = memnew(GLES3::MaterialStorage); mesh_storage = memnew(GLES3::MeshStorage); @@ -272,9 +276,9 @@ RasterizerGLES3::RasterizerGLES3() { light_storage = memnew(GLES3::LightStorage); copy_effects = memnew(GLES3::CopyEffects); gi = memnew(GLES3::GI); - storage = memnew(RasterizerStorageGLES3); - canvas = memnew(RasterizerCanvasGLES3(storage)); - scene = memnew(RasterizerSceneGLES3(storage)); + fog = memnew(GLES3::Fog); + canvas = memnew(RasterizerCanvasGLES3()); + scene = memnew(RasterizerSceneGLES3()); } RasterizerGLES3::~RasterizerGLES3() { diff --git a/drivers/gles3/rasterizer_gles3.h b/drivers/gles3/rasterizer_gles3.h index c0322dc45b..e842b6d70c 100644 --- a/drivers/gles3/rasterizer_gles3.h +++ b/drivers/gles3/rasterizer_gles3.h @@ -34,10 +34,10 @@ #ifdef GLES3_ENABLED #include "effects/copy_effects.h" +#include "environment/fog.h" #include "environment/gi.h" #include "rasterizer_canvas_gles3.h" #include "rasterizer_scene_gles3.h" -#include "rasterizer_storage_gles3.h" #include "servers/rendering/renderer_compositor.h" #include "storage/config.h" #include "storage/light_storage.h" @@ -45,6 +45,7 @@ #include "storage/mesh_storage.h" #include "storage/particles_storage.h" #include "storage/texture_storage.h" +#include "storage/utilities.h" class RasterizerGLES3 : public RendererCompositor { private: @@ -55,27 +56,29 @@ private: protected: GLES3::Config *config = nullptr; + GLES3::Utilities *utilities = nullptr; GLES3::TextureStorage *texture_storage = nullptr; GLES3::MaterialStorage *material_storage = nullptr; GLES3::MeshStorage *mesh_storage = nullptr; GLES3::ParticlesStorage *particles_storage = nullptr; GLES3::LightStorage *light_storage = nullptr; GLES3::GI *gi = nullptr; + GLES3::Fog *fog = nullptr; GLES3::CopyEffects *copy_effects = nullptr; - RasterizerStorageGLES3 *storage = nullptr; RasterizerCanvasGLES3 *canvas = nullptr; RasterizerSceneGLES3 *scene = nullptr; void _blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect); public: + RendererUtilities *get_utilities() { return utilities; } RendererLightStorage *get_light_storage() { return light_storage; } RendererMaterialStorage *get_material_storage() { return material_storage; } RendererMeshStorage *get_mesh_storage() { return mesh_storage; } RendererParticlesStorage *get_particles_storage() { return particles_storage; } RendererTextureStorage *get_texture_storage() { return texture_storage; } RendererGI *get_gi() { return gi; } - RendererStorage *get_storage() { return storage; } + RendererFog *get_fog() { return fog; } RendererCanvasRender *get_canvas() { return canvas; } RendererSceneRender *get_scene() { return scene; } diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 33c7b9bf32..989d0de496 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -33,6 +33,9 @@ #include "core/templates/sort_array.h" #include "servers/rendering/rendering_server_default.h" #include "storage/config.h" +#include "storage/light_storage.h" +#include "storage/mesh_storage.h" +#include "storage/texture_storage.h" #ifdef GLES3_ENABLED @@ -45,7 +48,7 @@ RasterizerSceneGLES3 *RasterizerSceneGLES3::get_singleton() { } RendererSceneRender::GeometryInstance *RasterizerSceneGLES3::geometry_instance_create(RID p_base) { - RS::InstanceType type = storage->get_base_type(p_base); + RS::InstanceType type = RSG::utilities->get_base_type(p_base); ERR_FAIL_COND_V(!((1 << type) & RS::INSTANCE_GEOMETRY_MASK), nullptr); GeometryInstanceGLES3 *ginstance = geometry_instance_alloc.alloc(); @@ -285,16 +288,16 @@ void RasterizerSceneGLES3::_update_dirty_geometry_instances() { } } -void RasterizerSceneGLES3::_geometry_instance_dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *p_tracker) { +void RasterizerSceneGLES3::_geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker) { switch (p_notification) { - case RendererStorage::DEPENDENCY_CHANGED_MATERIAL: - case RendererStorage::DEPENDENCY_CHANGED_MESH: - case RendererStorage::DEPENDENCY_CHANGED_PARTICLES: - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH: - case RendererStorage::DEPENDENCY_CHANGED_SKELETON_DATA: { + case Dependency::DEPENDENCY_CHANGED_MATERIAL: + case Dependency::DEPENDENCY_CHANGED_MESH: + case Dependency::DEPENDENCY_CHANGED_PARTICLES: + case Dependency::DEPENDENCY_CHANGED_MULTIMESH: + case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: { static_cast<RasterizerSceneGLES3 *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata)); } break; - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: { + case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: { GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_tracker->userdata); if (ginstance->data->base_type == RS::INSTANCE_MULTIMESH) { ginstance->instance_count = GLES3::MeshStorage::get_singleton()->multimesh_get_instances_to_draw(ginstance->data->base); @@ -306,7 +309,7 @@ void RasterizerSceneGLES3::_geometry_instance_dependency_changed(RendererStorage } } -void RasterizerSceneGLES3::_geometry_instance_dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *p_tracker) { +void RasterizerSceneGLES3::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) { static_cast<RasterizerSceneGLES3 *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata)); } @@ -376,7 +379,7 @@ void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(Geometry sdcache->surface_index = p_surface; if (ginstance->data->dirty_dependencies) { - storage->base_update_dependency(p_mesh, &ginstance->data->dependency_tracker); + RSG::utilities->base_update_dependency(p_mesh, &ginstance->data->dependency_tracker); } //shadow @@ -1609,10 +1612,10 @@ void RasterizerSceneGLES3::_setup_environment(const RenderDataGLES3 *p_render_da correction.set_depth_correction(p_flip_y); CameraMatrix projection = correction * p_render_data->cam_projection; //store camera into ubo - RasterizerStorageGLES3::store_camera(projection, scene_state.ubo.projection_matrix); - RasterizerStorageGLES3::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix); - RasterizerStorageGLES3::store_transform(p_render_data->cam_transform, scene_state.ubo.inv_view_matrix); - RasterizerStorageGLES3::store_transform(p_render_data->inv_cam_transform, scene_state.ubo.view_matrix); + GLES3::MaterialStorage::store_camera(projection, scene_state.ubo.projection_matrix); + GLES3::MaterialStorage::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix); + GLES3::MaterialStorage::store_transform(p_render_data->cam_transform, scene_state.ubo.inv_view_matrix); + GLES3::MaterialStorage::store_transform(p_render_data->inv_cam_transform, scene_state.ubo.view_matrix); scene_state.ubo.directional_light_count = p_render_data->directional_light_count; @@ -1659,7 +1662,7 @@ void RasterizerSceneGLES3::_setup_environment(const RenderDataGLES3 *p_render_da Basis sky_transform = env->sky_orientation; sky_transform = sky_transform.inverse() * p_render_data->cam_transform.basis; - RasterizerStorageGLES3::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform); + GLES3::MaterialStorage::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform); scene_state.ubo.use_ambient_cubemap = (ambient_src == RS::ENV_AMBIENT_SOURCE_BG && env_bg == RS::ENV_BG_SKY) || ambient_src == RS::ENV_AMBIENT_SOURCE_SKY; scene_state.ubo.use_ambient_light = scene_state.ubo.use_ambient_cubemap || ambient_src == RS::ENV_AMBIENT_SOURCE_COLOR; } @@ -1974,7 +1977,7 @@ void RasterizerSceneGLES3::render_scene(RID p_render_buffers, const CameraData * if (p_render_buffers.is_valid()) { clear_color = texture_storage->render_target_get_clear_request_color(rb->render_target); } else { - clear_color = storage->get_default_clear_color(); + clear_color = texture_storage->get_default_clear_color(); } Environment *env = environment_owner.get_or_null(p_environment); @@ -2657,12 +2660,10 @@ void RasterizerSceneGLES3::decals_set_filter(RS::DecalFilter p_filter) { void RasterizerSceneGLES3::light_projectors_set_filter(RS::LightProjectorFilter p_filter) { } -RasterizerSceneGLES3::RasterizerSceneGLES3(RasterizerStorageGLES3 *p_storage) { +RasterizerSceneGLES3::RasterizerSceneGLES3() { GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton(); GLES3::Config *config = GLES3::Config::get_singleton(); - storage = p_storage; - { // Setup Lights @@ -2870,15 +2871,15 @@ RasterizerSceneGLES3::~RasterizerSceneGLES3() { // Scene Shader GLES3::MaterialStorage::get_singleton()->shaders.scene_shader.version_free(scene_globals.shader_default_version); GLES3::MaterialStorage::get_singleton()->shaders.cubemap_filter_shader.version_free(scene_globals.cubemap_filter_shader_version); - storage->free(scene_globals.default_material); - storage->free(scene_globals.default_shader); + RSG::material_storage->material_free(scene_globals.default_material); + RSG::material_storage->shader_free(scene_globals.default_shader); // Sky Shader GLES3::MaterialStorage::get_singleton()->shaders.sky_shader.version_free(sky_globals.shader_default_version); - storage->free(sky_globals.default_material); - storage->free(sky_globals.default_shader); - storage->free(sky_globals.fog_material); - storage->free(sky_globals.fog_shader); + RSG::material_storage->material_free(sky_globals.default_material); + RSG::material_storage->shader_free(sky_globals.default_shader); + RSG::material_storage->material_free(sky_globals.fog_material); + RSG::material_storage->shader_free(sky_globals.fog_shader); glDeleteBuffers(1, &sky_globals.screen_triangle); glDeleteVertexArrays(1, &sky_globals.screen_triangle_array); glDeleteTextures(1, &sky_globals.radical_inverse_vdc_cache_tex); diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index 4757a3f161..53b76011fe 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -37,7 +37,6 @@ #include "core/templates/paged_allocator.h" #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" -#include "rasterizer_storage_gles3.h" #include "scene/resources/mesh.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_scene_render.h" @@ -45,6 +44,8 @@ #include "shader_gles3.h" #include "shaders/cubemap_filter.glsl.gen.h" #include "shaders/sky.glsl.gen.h" +#include "storage/material_storage.h" +#include "storage/utilities.h" enum RenderListType { RENDER_LIST_OPAQUE, //used for opaque objects @@ -125,7 +126,6 @@ struct RenderDataGLES3 { RendererScene::RenderInfo *render_info = nullptr; }; -class RasterizerStorageGLES3; class RasterizerCanvasGLES3; class RasterizerSceneGLES3 : public RendererSceneRender { @@ -323,7 +323,7 @@ private: bool mirror = false; bool dirty_dependencies = false; - RendererStorage::DependencyTracker dependency_tracker; + DependencyTracker dependency_tracker; }; Data *data = nullptr; @@ -345,8 +345,8 @@ private: INSTANCE_DATA_FLAG_MULTIMESH_HAS_CUSTOM_DATA = 1 << 15, }; - static void _geometry_instance_dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *p_tracker); - static void _geometry_instance_dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *p_tracker); + static void _geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker); + static void _geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker); SelfList<GeometryInstanceGLES3>::List geometry_instance_dirty_list; @@ -739,7 +739,6 @@ protected: void _free_sky_data(Sky *p_sky); public: - RasterizerStorageGLES3 *storage; RasterizerCanvasGLES3 *canvas; GeometryInstance *geometry_instance_create(RID p_base) override; @@ -943,7 +942,7 @@ public: void light_projectors_set_filter(RS::LightProjectorFilter p_filter) override; static RasterizerSceneGLES3 *get_singleton(); - RasterizerSceneGLES3(RasterizerStorageGLES3 *p_storage); + RasterizerSceneGLES3(); ~RasterizerSceneGLES3(); }; diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp deleted file mode 100644 index 3b80d88666..0000000000 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ /dev/null @@ -1,569 +0,0 @@ -/*************************************************************************/ -/* rasterizer_storage_gles3.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "rasterizer_storage_gles3.h" - -#ifdef GLES3_ENABLED - -#include "core/config/project_settings.h" -#include "core/math/transform_3d.h" -// #include "rasterizer_canvas_gles3.h" -#include "rasterizer_scene_gles3.h" -#include "servers/rendering/shader_language.h" - -/* MISC */ - -void RasterizerStorageGLES3::base_update_dependency(RID p_base, DependencyTracker *p_instance) { - if (GLES3::MeshStorage::get_singleton()->owns_mesh(p_base)) { - GLES3::Mesh *mesh = GLES3::MeshStorage::get_singleton()->get_mesh(p_base); - p_instance->update_dependency(&mesh->dependency); - } else if (GLES3::MeshStorage::get_singleton()->owns_multimesh(p_base)) { - GLES3::MultiMesh *multimesh = GLES3::MeshStorage::get_singleton()->get_multimesh(p_base); - p_instance->update_dependency(&multimesh->dependency); - if (multimesh->mesh.is_valid()) { - base_update_dependency(multimesh->mesh, p_instance); - } - } else if (GLES3::LightStorage::get_singleton()->owns_light(p_base)) { - GLES3::Light *l = GLES3::LightStorage::get_singleton()->get_light(p_base); - p_instance->update_dependency(&l->dependency); - } -} - -Vector<uint8_t> RasterizerStorageGLES3::buffer_get_data(GLenum p_target, GLuint p_buffer, uint32_t p_buffer_size) { - Vector<uint8_t> ret; - ret.resize(p_buffer_size); - glBindBuffer(p_target, p_buffer); - -#if defined(__EMSCRIPTEN__) - { - uint8_t *w = ret.ptrw(); - glGetBufferSubData(p_target, 0, p_buffer_size, w); - } -#else - void *data = glMapBufferRange(p_target, 0, p_buffer_size, GL_MAP_READ_BIT); - ERR_FAIL_NULL_V(data, Vector<uint8_t>()); - { - uint8_t *w = ret.ptrw(); - memcpy(w, data, p_buffer_size); - } - glUnmapBuffer(p_target); -#endif - glBindBuffer(p_target, 0); - return ret; -} - -/* OCCLUDER */ - -void RasterizerStorageGLES3::occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) { -} - -/* FOG */ - -RID RasterizerStorageGLES3::fog_volume_allocate() { - return RID(); -} - -void RasterizerStorageGLES3::fog_volume_initialize(RID p_rid) { -} - -void RasterizerStorageGLES3::fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) { -} - -void RasterizerStorageGLES3::fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) { -} - -void RasterizerStorageGLES3::fog_volume_set_material(RID p_fog_volume, RID p_material) { -} - -AABB RasterizerStorageGLES3::fog_volume_get_aabb(RID p_fog_volume) const { - return AABB(); -} - -RS::FogVolumeShape RasterizerStorageGLES3::fog_volume_get_shape(RID p_fog_volume) const { - return RS::FOG_VOLUME_SHAPE_BOX; -} - -/* VISIBILITY NOTIFIER */ -RID RasterizerStorageGLES3::visibility_notifier_allocate() { - return RID(); -} - -void RasterizerStorageGLES3::visibility_notifier_initialize(RID p_notifier) { -} - -void RasterizerStorageGLES3::visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) { -} - -void RasterizerStorageGLES3::visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) { -} - -AABB RasterizerStorageGLES3::visibility_notifier_get_aabb(RID p_notifier) const { - return AABB(); -} - -void RasterizerStorageGLES3::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) { -} - -/* CANVAS SHADOW */ - -RID RasterizerStorageGLES3::canvas_light_shadow_buffer_create(int p_width) { - CanvasLightShadow *cls = memnew(CanvasLightShadow); - - if (p_width > config->max_texture_size) { - p_width = config->max_texture_size; - } - - cls->size = p_width; - cls->height = 16; - - glActiveTexture(GL_TEXTURE0); - - glGenFramebuffers(1, &cls->fbo); - glBindFramebuffer(GL_FRAMEBUFFER, cls->fbo); - - glGenRenderbuffers(1, &cls->depth); - glBindRenderbuffer(GL_RENDERBUFFER, cls->depth); - glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, cls->size, cls->height); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, cls->depth); - - glGenTextures(1, &cls->distance); - glBindTexture(GL_TEXTURE_2D, cls->distance); - if (config->use_rgba_2d_shadows) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cls->size, cls->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - } else { - glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, cls->size, cls->height, 0, GL_RED, GL_FLOAT, nullptr); - } - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cls->distance, 0); - - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - //printf("errnum: %x\n",status); - glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo); - - if (status != GL_FRAMEBUFFER_COMPLETE) { - memdelete(cls); - ERR_FAIL_COND_V(status != GL_FRAMEBUFFER_COMPLETE, RID()); - } - - return canvas_light_shadow_owner.make_rid(cls); -} - -/* LIGHT SHADOW MAPPING */ -/* - -RID RasterizerStorageGLES3::canvas_light_occluder_create() { - CanvasOccluder *co = memnew(CanvasOccluder); - co->index_id = 0; - co->vertex_id = 0; - co->len = 0; - - return canvas_occluder_owner.make_rid(co); -} - -void RasterizerStorageGLES3::canvas_light_occluder_set_polylines(RID p_occluder, const PoolVector<Vector2> &p_lines) { - CanvasOccluder *co = canvas_occluder_owner.get(p_occluder); - ERR_FAIL_COND(!co); - - co->lines = p_lines; - - if (p_lines.size() != co->len) { - if (co->index_id) { - glDeleteBuffers(1, &co->index_id); - } if (co->vertex_id) { - glDeleteBuffers(1, &co->vertex_id); - } - - co->index_id = 0; - co->vertex_id = 0; - co->len = 0; - } - - if (p_lines.size()) { - PoolVector<float> geometry; - PoolVector<uint16_t> indices; - int lc = p_lines.size(); - - geometry.resize(lc * 6); - indices.resize(lc * 3); - - PoolVector<float>::Write vw = geometry.write(); - PoolVector<uint16_t>::Write iw = indices.write(); - - PoolVector<Vector2>::Read lr = p_lines.read(); - - const int POLY_HEIGHT = 16384; - - for (int i = 0; i < lc / 2; i++) { - vw[i * 12 + 0] = lr[i * 2 + 0].x; - vw[i * 12 + 1] = lr[i * 2 + 0].y; - vw[i * 12 + 2] = POLY_HEIGHT; - - vw[i * 12 + 3] = lr[i * 2 + 1].x; - vw[i * 12 + 4] = lr[i * 2 + 1].y; - vw[i * 12 + 5] = POLY_HEIGHT; - - vw[i * 12 + 6] = lr[i * 2 + 1].x; - vw[i * 12 + 7] = lr[i * 2 + 1].y; - vw[i * 12 + 8] = -POLY_HEIGHT; - - vw[i * 12 + 9] = lr[i * 2 + 0].x; - vw[i * 12 + 10] = lr[i * 2 + 0].y; - vw[i * 12 + 11] = -POLY_HEIGHT; - - iw[i * 6 + 0] = i * 4 + 0; - iw[i * 6 + 1] = i * 4 + 1; - iw[i * 6 + 2] = i * 4 + 2; - - iw[i * 6 + 3] = i * 4 + 2; - iw[i * 6 + 4] = i * 4 + 3; - iw[i * 6 + 5] = i * 4 + 0; - } - - //if same buffer len is being set, just use BufferSubData to avoid a pipeline flush - - if (!co->vertex_id) { - glGenBuffers(1, &co->vertex_id); - glBindBuffer(GL_ARRAY_BUFFER, co->vertex_id); - glBufferData(GL_ARRAY_BUFFER, lc * 6 * sizeof(real_t), vw.ptr(), GL_STATIC_DRAW); - } else { - glBindBuffer(GL_ARRAY_BUFFER, co->vertex_id); - glBufferSubData(GL_ARRAY_BUFFER, 0, lc * 6 * sizeof(real_t), vw.ptr()); - } - - glBindBuffer(GL_ARRAY_BUFFER, 0); //unbind - - if (!co->index_id) { - glGenBuffers(1, &co->index_id); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, co->index_id); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, lc * 3 * sizeof(uint16_t), iw.ptr(), GL_DYNAMIC_DRAW); - } else { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, co->index_id); - glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, lc * 3 * sizeof(uint16_t), iw.ptr()); - } - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //unbind - - co->len = lc; - } -} -*/ - -RS::InstanceType RasterizerStorageGLES3::get_base_type(RID p_rid) const { - if (GLES3::MeshStorage::get_singleton()->owns_mesh(p_rid)) { - return RS::INSTANCE_MESH; - } else if (GLES3::MeshStorage::get_singleton()->owns_multimesh(p_rid)) { - return RS::INSTANCE_MULTIMESH; - } else if (GLES3::LightStorage::get_singleton()->owns_light(p_rid)) { - return RS::INSTANCE_LIGHT; - } - return RS::INSTANCE_NONE; -} - -bool RasterizerStorageGLES3::free(RID p_rid) { - if (GLES3::TextureStorage::get_singleton()->owns_render_target(p_rid)) { - GLES3::TextureStorage::get_singleton()->render_target_free(p_rid); - return true; - } else if (GLES3::TextureStorage::get_singleton()->owns_texture(p_rid)) { - GLES3::TextureStorage::get_singleton()->texture_free(p_rid); - return true; - } else if (GLES3::TextureStorage::get_singleton()->owns_canvas_texture(p_rid)) { - GLES3::TextureStorage::get_singleton()->canvas_texture_free(p_rid); - return true; - } else if (GLES3::MaterialStorage::get_singleton()->owns_shader(p_rid)) { - GLES3::MaterialStorage::get_singleton()->shader_free(p_rid); - return true; - } else if (GLES3::MaterialStorage::get_singleton()->owns_material(p_rid)) { - GLES3::MaterialStorage::get_singleton()->material_free(p_rid); - return true; - } else if (GLES3::MeshStorage::get_singleton()->owns_mesh(p_rid)) { - GLES3::MeshStorage::get_singleton()->mesh_free(p_rid); - return true; - } else if (GLES3::MeshStorage::get_singleton()->owns_multimesh(p_rid)) { - GLES3::MeshStorage::get_singleton()->multimesh_free(p_rid); - return true; - } else if (GLES3::MeshStorage::get_singleton()->owns_mesh_instance(p_rid)) { - GLES3::MeshStorage::get_singleton()->mesh_instance_free(p_rid); - return true; - } else if (GLES3::LightStorage::get_singleton()->owns_light(p_rid)) { - GLES3::LightStorage::get_singleton()->light_free(p_rid); - return true; - } else { - return false; - } - /* - else if (reflection_probe_owner.owns(p_rid)) { - // delete the texture - ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_rid); - reflection_probe->instance_remove_deps(); - - reflection_probe_owner.free(p_rid); - memdelete(reflection_probe); - - return true; - } else if (lightmap_capture_data_owner.owns(p_rid)) { - // delete the texture - LightmapCapture *lightmap_capture = lightmap_capture_data_owner.get_or_null(p_rid); - lightmap_capture->instance_remove_deps(); - - lightmap_capture_data_owner.free(p_rid); - memdelete(lightmap_capture); - return true; - - } else if (canvas_occluder_owner.owns(p_rid)) { - CanvasOccluder *co = canvas_occluder_owner.get_or_null(p_rid); - if (co->index_id) { - glDeleteBuffers(1, &co->index_id); - } - if (co->vertex_id) { - glDeleteBuffers(1, &co->vertex_id); - } - - canvas_occluder_owner.free(p_rid); - memdelete(co); - - return true; - - } else if (canvas_light_shadow_owner.owns(p_rid)) { - CanvasLightShadow *cls = canvas_light_shadow_owner.get_or_null(p_rid); - glDeleteFramebuffers(1, &cls->fbo); - glDeleteRenderbuffers(1, &cls->depth); - glDeleteTextures(1, &cls->distance); - canvas_light_shadow_owner.free(p_rid); - memdelete(cls); - - return true; - */ -} - -bool RasterizerStorageGLES3::has_os_feature(const String &p_feature) const { - if (!config) { - return false; - } - - if (p_feature == "rgtc") { - return config->rgtc_supported; - } - - if (p_feature == "s3tc") { - return config->s3tc_supported; - } - - if (p_feature == "bptc") { - return config->bptc_supported; - } - - if (p_feature == "etc" || p_feature == "etc2") { - return config->etc2_supported; - } - - return false; -} - -//////////////////////////////////////////// - -void RasterizerStorageGLES3::set_debug_generate_wireframes(bool p_generate) { -} - -//void RasterizerStorageGLES3::render_info_begin_capture() { -// info.snap = info.render; -//} - -//void RasterizerStorageGLES3::render_info_end_capture() { -// info.snap.object_count = info.render.object_count - info.snap.object_count; -// info.snap.draw_call_count = info.render.draw_call_count - info.snap.draw_call_count; -// info.snap.material_switch_count = info.render.material_switch_count - info.snap.material_switch_count; -// info.snap.surface_switch_count = info.render.surface_switch_count - info.snap.surface_switch_count; -// info.snap.shader_rebind_count = info.render.shader_rebind_count - info.snap.shader_rebind_count; -// info.snap.vertices_count = info.render.vertices_count - info.snap.vertices_count; -// info.snap._2d_item_count = info.render._2d_item_count - info.snap._2d_item_count; -// info.snap._2d_draw_call_count = info.render._2d_draw_call_count - info.snap._2d_draw_call_count; -//} - -//int RasterizerStorageGLES3::get_captured_render_info(RS::RenderInfo p_info) { -// switch (p_info) { -// case RS::INFO_OBJECTS_IN_FRAME: { -// return info.snap.object_count; -// } break; -// case RS::INFO_VERTICES_IN_FRAME: { -// return info.snap.vertices_count; -// } break; -// case RS::INFO_MATERIAL_CHANGES_IN_FRAME: { -// return info.snap.material_switch_count; -// } break; -// case RS::INFO_SHADER_CHANGES_IN_FRAME: { -// return info.snap.shader_rebind_count; -// } break; -// case RS::INFO_SURFACE_CHANGES_IN_FRAME: { -// return info.snap.surface_switch_count; -// } break; -// case RS::INFO_DRAW_CALLS_IN_FRAME: { -// return info.snap.draw_call_count; -// } break; -// /* -// case RS::INFO_2D_ITEMS_IN_FRAME: { -// return info.snap._2d_item_count; -// } break; -// case RS::INFO_2D_DRAW_CALLS_IN_FRAME: { -// return info.snap._2d_draw_call_count; -// } break; -// */ -// default: { -// return get_render_info(p_info); -// } -// } -//} - -//int RasterizerStorageGLES3::get_render_info(RS::RenderInfo p_info) { -// switch (p_info) { -// case RS::INFO_OBJECTS_IN_FRAME: -// return info.render_final.object_count; -// case RS::INFO_VERTICES_IN_FRAME: -// return info.render_final.vertices_count; -// case RS::INFO_MATERIAL_CHANGES_IN_FRAME: -// return info.render_final.material_switch_count; -// case RS::INFO_SHADER_CHANGES_IN_FRAME: -// return info.render_final.shader_rebind_count; -// case RS::INFO_SURFACE_CHANGES_IN_FRAME: -// return info.render_final.surface_switch_count; -// case RS::INFO_DRAW_CALLS_IN_FRAME: -// return info.render_final.draw_call_count; -// /* -// case RS::INFO_2D_ITEMS_IN_FRAME: -// return info.render_final._2d_item_count; -// case RS::INFO_2D_DRAW_CALLS_IN_FRAME: -// return info.render_final._2d_draw_call_count; -//*/ -// case RS::INFO_USAGE_VIDEO_MEM_TOTAL: -// return 0; //no idea -// case RS::INFO_VIDEO_MEM_USED: -// return info.vertex_mem + info.texture_mem; -// case RS::INFO_TEXTURE_MEM_USED: -// return info.texture_mem; -// case RS::INFO_VERTEX_MEM_USED: -// return info.vertex_mem; -// default: -// return 0; //no idea either -// } -//} - -String RasterizerStorageGLES3::get_video_adapter_name() const { - return (const char *)glGetString(GL_RENDERER); -} - -String RasterizerStorageGLES3::get_video_adapter_vendor() const { - return (const char *)glGetString(GL_VENDOR); -} - -RenderingDevice::DeviceType RasterizerStorageGLES3::get_video_adapter_type() const { - return RenderingDevice::DeviceType::DEVICE_TYPE_OTHER; -} - -String RasterizerStorageGLES3::get_video_adapter_api_version() const { - return (const char *)glGetString(GL_VERSION); -} - -void RasterizerStorageGLES3::initialize() { - config = GLES3::Config::get_singleton(); - - // skeleton buffer - { - resources.skeleton_transform_buffer_size = 0; - glGenBuffers(1, &resources.skeleton_transform_buffer); - } - - // radical inverse vdc cache texture - // used for cubemap filtering - glGenTextures(1, &resources.radical_inverse_vdc_cache_tex); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, resources.radical_inverse_vdc_cache_tex); - /* - uint8_t radical_inverse[512]; - - for (uint32_t i = 0; i < 512; i++) { - uint32_t bits = i; - - bits = (bits << 16) | (bits >> 16); - bits = ((bits & 0x55555555) << 1) | ((bits & 0xAAAAAAAA) >> 1); - bits = ((bits & 0x33333333) << 2) | ((bits & 0xCCCCCCCC) >> 2); - bits = ((bits & 0x0F0F0F0F) << 4) | ((bits & 0xF0F0F0F0) >> 4); - bits = ((bits & 0x00FF00FF) << 8) | ((bits & 0xFF00FF00) >> 8); - - float value = float(bits) * 2.3283064365386963e-10; - radical_inverse[i] = uint8_t(CLAMP(value * 255.0, 0, 255)); - } - - //glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 512, 1, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, radical_inverse); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); //need this for proper sampling - */ - glBindTexture(GL_TEXTURE_2D, 0); - - { - glGenFramebuffers(1, &resources.mipmap_blur_fbo); - glGenTextures(1, &resources.mipmap_blur_color); - } - -#ifdef GLES_OVER_GL - glEnable(GL_PROGRAM_POINT_SIZE); -#endif -} - -void RasterizerStorageGLES3::finalize() { -} - -void RasterizerStorageGLES3::update_memory_info() { -} - -uint64_t RasterizerStorageGLES3::get_rendering_info(RS::RenderingInfo p_info) { - return 0; -} - -void RasterizerStorageGLES3::update_dirty_resources() { - GLES3::MaterialStorage::get_singleton()->_update_global_variables(); - GLES3::MaterialStorage::get_singleton()->_update_queued_materials(); - //GLES3::MeshStorage::get_singleton()->_update_dirty_skeletons(); - GLES3::MeshStorage::get_singleton()->_update_dirty_multimeshes(); -} - -RasterizerStorageGLES3::RasterizerStorageGLES3() { - initialize(); -} - -RasterizerStorageGLES3::~RasterizerStorageGLES3() { -} - -#endif // GLES3_ENABLED diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h deleted file mode 100644 index c42efbce19..0000000000 --- a/drivers/gles3/rasterizer_storage_gles3.h +++ /dev/null @@ -1,266 +0,0 @@ -/*************************************************************************/ -/* rasterizer_storage_gles3.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef RASTERIZER_STORAGE_OPENGL_H -#define RASTERIZER_STORAGE_OPENGL_H - -#ifdef GLES3_ENABLED - -#include "core/templates/local_vector.h" -#include "core/templates/rid_owner.h" -#include "core/templates/self_list.h" -#include "servers/rendering/renderer_compositor.h" -#include "servers/rendering/renderer_storage.h" -#include "servers/rendering/shader_compiler.h" -#include "servers/rendering/shader_language.h" -#include "storage/config.h" -#include "storage/light_storage.h" -#include "storage/material_storage.h" -#include "storage/mesh_storage.h" -#include "storage/texture_storage.h" - -// class RasterizerCanvasGLES3; -// class RasterizerSceneGLES3; - -class RasterizerStorageGLES3 : public RendererStorage { -public: - // RasterizerCanvasGLES3 *canvas; - // RasterizerSceneGLES3 *scene; - - GLES3::Config *config = nullptr; - - static _FORCE_INLINE_ void store_transform(const Transform3D &p_mtx, float *p_array) { - p_array[0] = p_mtx.basis.rows[0][0]; - p_array[1] = p_mtx.basis.rows[1][0]; - p_array[2] = p_mtx.basis.rows[2][0]; - p_array[3] = 0; - p_array[4] = p_mtx.basis.rows[0][1]; - p_array[5] = p_mtx.basis.rows[1][1]; - p_array[6] = p_mtx.basis.rows[2][1]; - p_array[7] = 0; - p_array[8] = p_mtx.basis.rows[0][2]; - p_array[9] = p_mtx.basis.rows[1][2]; - p_array[10] = p_mtx.basis.rows[2][2]; - p_array[11] = 0; - p_array[12] = p_mtx.origin.x; - p_array[13] = p_mtx.origin.y; - p_array[14] = p_mtx.origin.z; - p_array[15] = 1; - } - - static _FORCE_INLINE_ void store_transform_3x3(const Basis &p_mtx, float *p_array) { - p_array[0] = p_mtx.rows[0][0]; - p_array[1] = p_mtx.rows[1][0]; - p_array[2] = p_mtx.rows[2][0]; - p_array[3] = 0; - p_array[4] = p_mtx.rows[0][1]; - p_array[5] = p_mtx.rows[1][1]; - p_array[6] = p_mtx.rows[2][1]; - p_array[7] = 0; - p_array[8] = p_mtx.rows[0][2]; - p_array[9] = p_mtx.rows[1][2]; - p_array[10] = p_mtx.rows[2][2]; - p_array[11] = 0; - } - - static _FORCE_INLINE_ void store_camera(const CameraMatrix &p_mtx, float *p_array) { - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - p_array[i * 4 + j] = p_mtx.matrix[i][j]; - } - } - } - - // Buffer size is specified in bytes - static Vector<uint8_t> buffer_get_data(GLenum p_target, GLuint p_buffer, uint32_t p_buffer_size); - - struct Resources { - GLuint mipmap_blur_fbo; - GLuint mipmap_blur_color; - - GLuint radical_inverse_vdc_cache_tex; - bool use_rgba_2d_shadows; - - size_t skeleton_transform_buffer_size; - GLuint skeleton_transform_buffer; - LocalVector<float> skeleton_transform_cpu_buffer; - - } resources; - - struct Info { - uint64_t texture_mem = 0; - uint64_t vertex_mem = 0; - - struct Render { - uint32_t object_count; - uint32_t draw_call_count; - uint32_t material_switch_count; - uint32_t surface_switch_count; - uint32_t shader_rebind_count; - uint32_t vertices_count; - uint32_t _2d_item_count; - uint32_t _2d_draw_call_count; - - void reset() { - object_count = 0; - draw_call_count = 0; - material_switch_count = 0; - surface_switch_count = 0; - shader_rebind_count = 0; - vertices_count = 0; - _2d_item_count = 0; - _2d_draw_call_count = 0; - } - } render, render_final, snap; - - Info() { - render.reset(); - render_final.reset(); - } - - } info; - - ///////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////API//////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////////////// - -public: - virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override; - - /* OCCLUDER */ - - void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices); - - /* FOG VOLUMES */ - - RID fog_volume_allocate() override; - void fog_volume_initialize(RID p_rid) override; - - void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) override; - void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) override; - void fog_volume_set_material(RID p_fog_volume, RID p_material) override; - AABB fog_volume_get_aabb(RID p_fog_volume) const override; - RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const override; - - /* VISIBILITY NOTIFIER */ - RID visibility_notifier_allocate() override; - void visibility_notifier_initialize(RID p_notifier) override; - void visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) override; - void visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) override; - - AABB visibility_notifier_get_aabb(RID p_notifier) const override; - void visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) override; - - // access from canvas - // GLES3::RenderTarget * render_target_get(RID p_render_target); - - /* CANVAS SHADOW */ - - struct CanvasLightShadow { - RID self; - int size; - int height; - GLuint fbo; - GLuint depth; - GLuint distance; //for older devices - }; - - RID_PtrOwner<CanvasLightShadow> canvas_light_shadow_owner; - - RID canvas_light_shadow_buffer_create(int p_width); - - /* LIGHT SHADOW MAPPING */ - /* - struct CanvasOccluder { - RID self; - - GLuint vertex_id; // 0 means, unconfigured - GLuint index_id; // 0 means, unconfigured - LocalVector<Vector2> lines; - int len; - }; - - RID_Owner<CanvasOccluder> canvas_occluder_owner; - - RID canvas_light_occluder_create(); - void canvas_light_occluder_set_polylines(RID p_occluder, const LocalVector<Vector2> &p_lines); -*/ - - RS::InstanceType get_base_type(RID p_rid) const override; - - bool free(RID p_rid) override; - - void initialize(); - void finalize(); - - void update_memory_info() override; - uint64_t get_rendering_info(RS::RenderingInfo p_info) override; - - bool has_os_feature(const String &p_feature) const override; - - void update_dirty_resources() override; - - void set_debug_generate_wireframes(bool p_generate) override; - - // void render_info_begin_capture() override; - // void render_info_end_capture() override; - // int get_captured_render_info(RS::RenderInfo p_info) override; - - // int get_render_info(RS::RenderInfo p_info) override; - String get_video_adapter_name() const override; - String get_video_adapter_vendor() const override; - RenderingDevice::DeviceType get_video_adapter_type() const override; - String get_video_adapter_api_version() const override; - - void capture_timestamps_begin() override {} - void capture_timestamp(const String &p_name) override {} - uint32_t get_captured_timestamps_count() const override { - return 0; - } - uint64_t get_captured_timestamps_frame() const override { - return 0; - } - uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const override { - return 0; - } - uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const override { - return 0; - } - String get_captured_timestamp_name(uint32_t p_index) const override { - return String(); - } - - RasterizerStorageGLES3(); - ~RasterizerStorageGLES3(); -}; - -#endif // GLES3_ENABLED - -#endif // RASTERIZER_STORAGE_OPENGL_H diff --git a/drivers/gles3/storage/light_storage.cpp b/drivers/gles3/storage/light_storage.cpp index 954aa11c0d..22578c9e91 100644 --- a/drivers/gles3/storage/light_storage.cpp +++ b/drivers/gles3/storage/light_storage.cpp @@ -139,12 +139,12 @@ void LightStorage::light_set_param(RID p_light, RS::LightParam p_param, float p_ case RS::LIGHT_PARAM_SHADOW_PANCAKE_SIZE: case RS::LIGHT_PARAM_SHADOW_BIAS: { light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } break; case RS::LIGHT_PARAM_SIZE: { if ((light->param[p_param] > CMP_EPSILON) != (p_value > CMP_EPSILON)) { //changing from no size to size and the opposite - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); } } break; default: { @@ -160,7 +160,7 @@ void LightStorage::light_set_shadow(RID p_light, bool p_enabled) { light->shadow = p_enabled; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_projector(RID p_light, RID p_texture) { @@ -182,7 +182,7 @@ void LightStorage::light_set_projector(RID p_light, RID p_texture) { if (light->projector.is_valid()) { texture_storage->texture_add_to_decal_atlas(light->projector, light->type == RS::LIGHT_OMNI); } - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); } } @@ -200,7 +200,7 @@ void LightStorage::light_set_cull_mask(RID p_light, uint32_t p_mask) { light->cull_mask = p_mask; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_distance_fade(RID p_light, bool p_enabled, float p_begin, float p_shadow, float p_length) { @@ -220,7 +220,7 @@ void LightStorage::light_set_reverse_cull_face_mode(RID p_light, bool p_enabled) light->reverse_cull = p_enabled; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_bake_mode(RID p_light, RS::LightBakeMode p_bake_mode) { @@ -230,7 +230,7 @@ void LightStorage::light_set_bake_mode(RID p_light, RS::LightBakeMode p_bake_mod light->bake_mode = p_bake_mode; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_omni_set_shadow_mode(RID p_light, RS::LightOmniShadowMode p_mode) { @@ -240,7 +240,7 @@ void LightStorage::light_omni_set_shadow_mode(RID p_light, RS::LightOmniShadowMo light->omni_shadow_mode = p_mode; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } RS::LightOmniShadowMode LightStorage::light_omni_get_shadow_mode(RID p_light) { @@ -256,7 +256,7 @@ void LightStorage::light_directional_set_shadow_mode(RID p_light, RS::LightDirec light->directional_shadow_mode = p_mode; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_directional_set_blend_splits(RID p_light, bool p_enable) { @@ -265,7 +265,7 @@ void LightStorage::light_directional_set_blend_splits(RID p_light, bool p_enable light->directional_blend_splits = p_enable; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } bool LightStorage::light_directional_get_blend_splits(RID p_light) const { @@ -476,4 +476,104 @@ float LightStorage::lightmap_get_probe_capture_update_speed() const { return 0; } +/* LIGHT SHADOW MAPPING */ +/* + +RID LightStorage::canvas_light_occluder_create() { + CanvasOccluder *co = memnew(CanvasOccluder); + co->index_id = 0; + co->vertex_id = 0; + co->len = 0; + + return canvas_occluder_owner.make_rid(co); +} + +void LightStorage::canvas_light_occluder_set_polylines(RID p_occluder, const PoolVector<Vector2> &p_lines) { + CanvasOccluder *co = canvas_occluder_owner.get(p_occluder); + ERR_FAIL_COND(!co); + + co->lines = p_lines; + + if (p_lines.size() != co->len) { + if (co->index_id) { + glDeleteBuffers(1, &co->index_id); + } if (co->vertex_id) { + glDeleteBuffers(1, &co->vertex_id); + } + + co->index_id = 0; + co->vertex_id = 0; + co->len = 0; + } + + if (p_lines.size()) { + PoolVector<float> geometry; + PoolVector<uint16_t> indices; + int lc = p_lines.size(); + + geometry.resize(lc * 6); + indices.resize(lc * 3); + + PoolVector<float>::Write vw = geometry.write(); + PoolVector<uint16_t>::Write iw = indices.write(); + + PoolVector<Vector2>::Read lr = p_lines.read(); + + const int POLY_HEIGHT = 16384; + + for (int i = 0; i < lc / 2; i++) { + vw[i * 12 + 0] = lr[i * 2 + 0].x; + vw[i * 12 + 1] = lr[i * 2 + 0].y; + vw[i * 12 + 2] = POLY_HEIGHT; + + vw[i * 12 + 3] = lr[i * 2 + 1].x; + vw[i * 12 + 4] = lr[i * 2 + 1].y; + vw[i * 12 + 5] = POLY_HEIGHT; + + vw[i * 12 + 6] = lr[i * 2 + 1].x; + vw[i * 12 + 7] = lr[i * 2 + 1].y; + vw[i * 12 + 8] = -POLY_HEIGHT; + + vw[i * 12 + 9] = lr[i * 2 + 0].x; + vw[i * 12 + 10] = lr[i * 2 + 0].y; + vw[i * 12 + 11] = -POLY_HEIGHT; + + iw[i * 6 + 0] = i * 4 + 0; + iw[i * 6 + 1] = i * 4 + 1; + iw[i * 6 + 2] = i * 4 + 2; + + iw[i * 6 + 3] = i * 4 + 2; + iw[i * 6 + 4] = i * 4 + 3; + iw[i * 6 + 5] = i * 4 + 0; + } + + //if same buffer len is being set, just use BufferSubData to avoid a pipeline flush + + if (!co->vertex_id) { + glGenBuffers(1, &co->vertex_id); + glBindBuffer(GL_ARRAY_BUFFER, co->vertex_id); + glBufferData(GL_ARRAY_BUFFER, lc * 6 * sizeof(real_t), vw.ptr(), GL_STATIC_DRAW); + } else { + glBindBuffer(GL_ARRAY_BUFFER, co->vertex_id); + glBufferSubData(GL_ARRAY_BUFFER, 0, lc * 6 * sizeof(real_t), vw.ptr()); + } + + glBindBuffer(GL_ARRAY_BUFFER, 0); //unbind + + if (!co->index_id) { + glGenBuffers(1, &co->index_id); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, co->index_id); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, lc * 3 * sizeof(uint16_t), iw.ptr(), GL_DYNAMIC_DRAW); + } else { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, co->index_id); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, lc * 3 * sizeof(uint16_t), iw.ptr()); + } + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //unbind + + co->len = lc; + } +} +*/ + #endif // !GLES3_ENABLED diff --git a/drivers/gles3/storage/light_storage.h b/drivers/gles3/storage/light_storage.h index 5acaf45aa3..575ab93eab 100644 --- a/drivers/gles3/storage/light_storage.h +++ b/drivers/gles3/storage/light_storage.h @@ -37,8 +37,8 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "servers/rendering/renderer_compositor.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/storage/light_storage.h" +#include "servers/rendering/storage/utilities.h" #include "platform_config.h" #ifndef OPENGL_INCLUDE_H @@ -72,7 +72,7 @@ struct Light { RS::LightDirectionalSkyMode directional_sky_mode = RS::LIGHT_DIRECTIONAL_SKY_MODE_LIGHT_AND_SKY; uint64_t version = 0; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* REFLECTION PROBE */ @@ -93,7 +93,7 @@ struct ReflectionProbe { uint32_t cull_mask = (1 << 20) - 1; float mesh_lod_threshold = 0.01; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* LIGHTMAP */ @@ -115,7 +115,7 @@ struct Lightmap { int32_t over = EMPTY_LEAF, under = EMPTY_LEAF; }; - RendererStorage::Dependency dependency; + Dependency dependency; }; class LightStorage : public RendererLightStorage { @@ -321,6 +321,23 @@ public: virtual bool lightmap_is_interior(RID p_lightmap) const override; virtual void lightmap_set_probe_capture_update_speed(float p_speed) override; virtual float lightmap_get_probe_capture_update_speed() const override; + + /* LIGHT SHADOW MAPPING */ + /* + struct CanvasOccluder { + RID self; + + GLuint vertex_id; // 0 means, unconfigured + GLuint index_id; // 0 means, unconfigured + LocalVector<Vector2> lines; + int len; + }; + + RID_Owner<CanvasOccluder> canvas_occluder_owner; + + RID canvas_light_occluder_create(); + void canvas_light_occluder_set_polylines(RID p_occluder, const LocalVector<Vector2> &p_lines); + */ }; } // namespace GLES3 diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp index fd50bdedbd..aa19826953 100644 --- a/drivers/gles3/storage/material_storage.cpp +++ b/drivers/gles3/storage/material_storage.cpp @@ -2456,7 +2456,7 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { for (Material *E : shader->owners) { Material *material = E; - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); _material_queue_update(material, true, true); } } @@ -2593,7 +2593,7 @@ void MaterialStorage::material_set_shader(RID p_material, RID p_shader) { } if (p_shader.is_null()) { - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); material->shader_id = 0; return; } @@ -2616,7 +2616,7 @@ void MaterialStorage::material_set_shader(RID p_material, RID p_shader) { material->data->set_next_pass(material->next_pass); material->data->set_render_priority(material->priority); //updating happens later - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); _material_queue_update(material, true, true); } @@ -2662,7 +2662,7 @@ void MaterialStorage::material_set_next_pass(RID p_material, RID p_next_material material->data->set_next_pass(p_next_material); } - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); } void MaterialStorage::material_set_render_priority(RID p_material, int priority) { @@ -2715,7 +2715,7 @@ void MaterialStorage::material_get_instance_shader_parameters(RID p_material, Li } } -void MaterialStorage::material_update_dependency(RID p_material, RendererStorage::DependencyTracker *p_instance) { +void MaterialStorage::material_update_dependency(RID p_material, DependencyTracker *p_instance) { Material *material = material_owner.get_or_null(p_material); ERR_FAIL_COND(!material); p_instance->update_dependency(&material->dependency); diff --git a/drivers/gles3/storage/material_storage.h b/drivers/gles3/storage/material_storage.h index 09f6680bec..6ad277c2b9 100644 --- a/drivers/gles3/storage/material_storage.h +++ b/drivers/gles3/storage/material_storage.h @@ -37,10 +37,10 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "servers/rendering/renderer_compositor.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/shader_compiler.h" #include "servers/rendering/shader_language.h" #include "servers/rendering/storage/material_storage.h" +#include "servers/rendering/storage/utilities.h" #include "../shaders/canvas.glsl.gen.h" #include "../shaders/cubemap_filter.glsl.gen.h" @@ -125,7 +125,7 @@ struct Material { RID next_pass; SelfList<Material> update_element; - RendererStorage::Dependency dependency; + Dependency dependency; Material() : update_element(this) {} @@ -453,6 +453,48 @@ public: MaterialStorage(); virtual ~MaterialStorage(); + static _FORCE_INLINE_ void store_transform(const Transform3D &p_mtx, float *p_array) { + p_array[0] = p_mtx.basis.rows[0][0]; + p_array[1] = p_mtx.basis.rows[1][0]; + p_array[2] = p_mtx.basis.rows[2][0]; + p_array[3] = 0; + p_array[4] = p_mtx.basis.rows[0][1]; + p_array[5] = p_mtx.basis.rows[1][1]; + p_array[6] = p_mtx.basis.rows[2][1]; + p_array[7] = 0; + p_array[8] = p_mtx.basis.rows[0][2]; + p_array[9] = p_mtx.basis.rows[1][2]; + p_array[10] = p_mtx.basis.rows[2][2]; + p_array[11] = 0; + p_array[12] = p_mtx.origin.x; + p_array[13] = p_mtx.origin.y; + p_array[14] = p_mtx.origin.z; + p_array[15] = 1; + } + + static _FORCE_INLINE_ void store_transform_3x3(const Basis &p_mtx, float *p_array) { + p_array[0] = p_mtx.rows[0][0]; + p_array[1] = p_mtx.rows[1][0]; + p_array[2] = p_mtx.rows[2][0]; + p_array[3] = 0; + p_array[4] = p_mtx.rows[0][1]; + p_array[5] = p_mtx.rows[1][1]; + p_array[6] = p_mtx.rows[2][1]; + p_array[7] = 0; + p_array[8] = p_mtx.rows[0][2]; + p_array[9] = p_mtx.rows[1][2]; + p_array[10] = p_mtx.rows[2][2]; + p_array[11] = 0; + } + + static _FORCE_INLINE_ void store_camera(const CameraMatrix &p_mtx, float *p_array) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + p_array[i * 4 + j] = p_mtx.matrix[i][j]; + } + } + } + struct Shaders { CanvasShaderGLES3 canvas_shader; SkyShaderGLES3 sky_shader; @@ -534,7 +576,7 @@ public: virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override; - virtual void material_update_dependency(RID p_material, RendererStorage::DependencyTracker *p_instance) override; + virtual void material_update_dependency(RID p_material, DependencyTracker *p_instance) override; _FORCE_INLINE_ uint32_t material_get_shader_id(RID p_material) { Material *material = material_owner.get_or_null(p_material); diff --git a/drivers/gles3/storage/mesh_storage.cpp b/drivers/gles3/storage/mesh_storage.cpp index 5aa82bfcc1..b042e53116 100644 --- a/drivers/gles3/storage/mesh_storage.cpp +++ b/drivers/gles3/storage/mesh_storage.cpp @@ -31,8 +31,8 @@ #ifdef GLES3_ENABLED #include "mesh_storage.h" -#include "../rasterizer_storage_gles3.h" #include "material_storage.h" +#include "utilities.h" using namespace GLES3; @@ -72,7 +72,7 @@ void MeshStorage::mesh_free(RID p_rid) { for (Mesh *E : mesh->shadow_owners) { Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); - shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + shadow_owner->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } } mesh_owner.free(p_rid); @@ -268,12 +268,12 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) _mesh_instance_add_surface(mi, mesh, mesh->surface_count - 1); } - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); for (Mesh *E : mesh->shadow_owners) { Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); - shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + shadow_owner->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } mesh->material_cache.clear(); @@ -314,7 +314,7 @@ void MeshStorage::mesh_surface_set_material(RID p_mesh, int p_surface, RID p_mat ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_surface, mesh->surface_count); mesh->surfaces[p_surface]->material = p_material; - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); mesh->material_cache.clear(); } @@ -335,10 +335,10 @@ RS::SurfaceData MeshStorage::mesh_get_surface(RID p_mesh, int p_surface) const { RS::SurfaceData sd; sd.format = s.format; - sd.vertex_data = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, s.vertex_buffer, s.vertex_buffer_size); + sd.vertex_data = Utilities::buffer_get_data(GL_ARRAY_BUFFER, s.vertex_buffer, s.vertex_buffer_size); if (s.attribute_buffer != 0) { - sd.attribute_data = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, s.attribute_buffer, s.attribute_buffer_size); + sd.attribute_data = Utilities::buffer_get_data(GL_ARRAY_BUFFER, s.attribute_buffer, s.attribute_buffer_size); } sd.vertex_count = s.vertex_count; @@ -346,14 +346,14 @@ RS::SurfaceData MeshStorage::mesh_get_surface(RID p_mesh, int p_surface) const { sd.primitive = s.primitive; if (sd.index_count) { - sd.index_data = RasterizerStorageGLES3::buffer_get_data(GL_ELEMENT_ARRAY_BUFFER, s.index_buffer, s.index_buffer_size); + sd.index_data = Utilities::buffer_get_data(GL_ELEMENT_ARRAY_BUFFER, s.index_buffer, s.index_buffer_size); } sd.aabb = s.aabb; for (uint32_t i = 0; i < s.lod_count; i++) { RS::SurfaceData::LOD lod; lod.edge_length = s.lods[i].edge_length; - lod.index_data = RasterizerStorageGLES3::buffer_get_data(GL_ELEMENT_ARRAY_BUFFER, s.lods[i].index_buffer, s.lods[i].index_buffer_size); + lod.index_data = Utilities::buffer_get_data(GL_ELEMENT_ARRAY_BUFFER, s.lods[i].index_buffer, s.lods[i].index_buffer_size); sd.lods.push_back(lod); } @@ -504,7 +504,7 @@ void MeshStorage::mesh_set_shadow_mesh(RID p_mesh, RID p_shadow_mesh) { shadow_mesh->shadow_owners.insert(mesh); } - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } void MeshStorage::mesh_clear(RID p_mesh) { @@ -553,12 +553,12 @@ void MeshStorage::mesh_clear(RID p_mesh) { _mesh_instance_clear(mi); } mesh->has_bone_weights = false; - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); for (Mesh *E : mesh->shadow_owners) { Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); - shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + shadow_owner->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } } @@ -899,7 +899,7 @@ void MeshStorage::multimesh_allocate_data(RID p_multimesh, int p_instances, RS:: glBindBuffer(GL_ARRAY_BUFFER, 0); } - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MULTIMESH); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MULTIMESH); } int MeshStorage::multimesh_get_instance_count(RID p_multimesh) const { @@ -926,14 +926,14 @@ void MeshStorage::multimesh_set_mesh(RID p_multimesh, RID p_mesh) { } else if (multimesh->instances) { // Need to re-create AABB. Unfortunately, calling this has a penalty. if (multimesh->buffer_set) { - Vector<uint8_t> buffer = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); + Vector<uint8_t> buffer = Utilities::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); const uint8_t *r = buffer.ptr(); const float *data = (const float *)r; _multimesh_re_create_aabb(multimesh, data, multimesh->instances); } } - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } #define MULTIMESH_DIRTY_REGION_SIZE 512 @@ -950,7 +950,7 @@ void MeshStorage::_multimesh_make_local(MultiMesh *multimesh) const { float *w = multimesh->data_cache.ptrw(); if (multimesh->buffer_set) { - Vector<uint8_t> buffer = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); + Vector<uint8_t> buffer = Utilities::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); { const uint8_t *r = buffer.ptr(); @@ -1348,7 +1348,7 @@ void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_b const float *data = multimesh->data_cache.ptr(); _multimesh_re_create_aabb(multimesh, data, multimesh->instances); - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } } @@ -1363,7 +1363,7 @@ Vector<float> MeshStorage::multimesh_get_buffer(RID p_multimesh) const { } else { // Buffer not cached, so fetch from GPU memory. This can be a stalling operation, avoid whenever possible. - Vector<uint8_t> buffer = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); + Vector<uint8_t> buffer = Utilities::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); ret.resize(multimesh->instances * multimesh->stride_cache); { float *w = ret.ptrw(); @@ -1439,7 +1439,7 @@ void MeshStorage::multimesh_set_visible_instances(RID p_multimesh, int p_visible multimesh->visible_instances = p_visible; - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES); } int MeshStorage::multimesh_get_visible_instances(RID p_multimesh) const { @@ -1493,7 +1493,7 @@ void MeshStorage::_update_dirty_multimeshes() { if (multimesh->aabb_dirty && multimesh->mesh.is_valid()) { _multimesh_re_create_aabb(multimesh, data, visible_instances); multimesh->aabb_dirty = false; - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } } @@ -1542,7 +1542,12 @@ Transform2D MeshStorage::skeleton_bone_get_transform_2d(RID p_skeleton, int p_bo return Transform2D(); } -void MeshStorage::skeleton_update_dependency(RID p_base, RendererStorage::DependencyTracker *p_instance) { +void MeshStorage::skeleton_update_dependency(RID p_base, DependencyTracker *p_instance) { +} + +/* OCCLUDER */ + +void MeshStorage::occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) { } #endif // GLES3_ENABLED diff --git a/drivers/gles3/storage/mesh_storage.h b/drivers/gles3/storage/mesh_storage.h index 3bb7061413..c51cd5dcd6 100644 --- a/drivers/gles3/storage/mesh_storage.h +++ b/drivers/gles3/storage/mesh_storage.h @@ -37,6 +37,7 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "servers/rendering/storage/mesh_storage.h" +#include "servers/rendering/storage/utilities.h" #include "platform_config.h" #ifndef OPENGL_INCLUDE_H @@ -126,7 +127,7 @@ struct Mesh { RID shadow_mesh; HashSet<Mesh *> shadow_owners; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* Mesh Instance */ @@ -179,7 +180,7 @@ struct MultiMesh { bool dirty = false; MultiMesh *dirty_list = nullptr; - RendererStorage::Dependency dependency; + Dependency dependency; }; struct Skeleton { @@ -194,7 +195,7 @@ struct Skeleton { uint64_t version = 1; - RendererStorage::Dependency dependency; + Dependency dependency; }; class MeshStorage : public RendererMeshStorage { @@ -531,7 +532,11 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform) override; virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const override; - virtual void skeleton_update_dependency(RID p_base, RendererStorage::DependencyTracker *p_instance) override; + virtual void skeleton_update_dependency(RID p_base, DependencyTracker *p_instance) override; + + /* OCCLUDER */ + + void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices); }; } // namespace GLES3 diff --git a/drivers/gles3/storage/texture_storage.cpp b/drivers/gles3/storage/texture_storage.cpp index 42c80da39a..c05f516548 100644 --- a/drivers/gles3/storage/texture_storage.cpp +++ b/drivers/gles3/storage/texture_storage.cpp @@ -183,6 +183,12 @@ TextureStorage::TextureStorage() { texture.gl_set_filter(RS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST); } } + + glBindTexture(GL_TEXTURE_2D, 0); + +#ifdef GLES_OVER_GL + glEnable(GL_PROGRAM_POINT_SIZE); +#endif } TextureStorage::~TextureStorage() { @@ -244,6 +250,55 @@ void TextureStorage::canvas_texture_set_texture_repeat(RID p_canvas_texture, RS: ct->texture_repeat = p_repeat; } +/* CANVAS SHADOW */ + +RID TextureStorage::canvas_light_shadow_buffer_create(int p_width) { + Config *config = Config::get_singleton(); + CanvasLightShadow *cls = memnew(CanvasLightShadow); + + if (p_width > config->max_texture_size) { + p_width = config->max_texture_size; + } + + cls->size = p_width; + cls->height = 16; + + glActiveTexture(GL_TEXTURE0); + + glGenFramebuffers(1, &cls->fbo); + glBindFramebuffer(GL_FRAMEBUFFER, cls->fbo); + + glGenRenderbuffers(1, &cls->depth); + glBindRenderbuffer(GL_RENDERBUFFER, cls->depth); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, cls->size, cls->height); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, cls->depth); + + glGenTextures(1, &cls->distance); + glBindTexture(GL_TEXTURE_2D, cls->distance); + if (config->use_rgba_2d_shadows) { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cls->size, cls->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + } else { + glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, cls->size, cls->height, 0, GL_RED, GL_FLOAT, nullptr); + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cls->distance, 0); + + GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + //printf("errnum: %x\n",status); + glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo); + + if (status != GL_FRAMEBUFFER_COMPLETE) { + memdelete(cls); + ERR_FAIL_COND_V(status != GL_FRAMEBUFFER_COMPLETE, RID()); + } + + return canvas_light_shadow_owner.make_rid(cls); +} + /* Texture API */ Ref<Image> TextureStorage::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool p_force_decompress) const { diff --git a/drivers/gles3/storage/texture_storage.h b/drivers/gles3/storage/texture_storage.h index d6d04e45a1..de887f9184 100644 --- a/drivers/gles3/storage/texture_storage.h +++ b/drivers/gles3/storage/texture_storage.h @@ -132,6 +132,17 @@ struct CanvasTexture { bool cleared_cache = true; }; +/* CANVAS SHADOW */ + +struct CanvasLightShadow { + RID self; + int size; + int height; + GLuint fbo; + GLuint depth; + GLuint distance; //for older devices +}; + struct RenderTarget; struct Texture { @@ -364,6 +375,10 @@ private: RID_Owner<CanvasTexture, true> canvas_texture_owner; + /* CANVAS SHADOW */ + + RID_PtrOwner<CanvasLightShadow> canvas_light_shadow_owner; + /* Texture API */ mutable RID_Owner<Texture> texture_owner; @@ -403,6 +418,10 @@ public: virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) override; virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) override; + /* CANVAS SHADOW */ + + RID canvas_light_shadow_buffer_create(int p_width); + /* Texture API */ Texture *get_texture(RID p_rid) { diff --git a/drivers/gles3/storage/utilities.cpp b/drivers/gles3/storage/utilities.cpp new file mode 100644 index 0000000000..a00210a2ab --- /dev/null +++ b/drivers/gles3/storage/utilities.cpp @@ -0,0 +1,353 @@ +/*************************************************************************/ +/* utilities.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifdef GLES3_ENABLED + +#include "utilities.h" +#include "config.h" +#include "light_storage.h" +#include "material_storage.h" +#include "mesh_storage.h" +#include "particles_storage.h" +#include "texture_storage.h" + +using namespace GLES3; + +Utilities *Utilities::singleton = nullptr; + +Utilities::Utilities() { + singleton = this; +} + +Utilities::~Utilities() { + singleton = nullptr; +} + +Vector<uint8_t> Utilities::buffer_get_data(GLenum p_target, GLuint p_buffer, uint32_t p_buffer_size) { + Vector<uint8_t> ret; + ret.resize(p_buffer_size); + glBindBuffer(p_target, p_buffer); + +#if defined(__EMSCRIPTEN__) + { + uint8_t *w = ret.ptrw(); + glGetBufferSubData(p_target, 0, p_buffer_size, w); + } +#else + void *data = glMapBufferRange(p_target, 0, p_buffer_size, GL_MAP_READ_BIT); + ERR_FAIL_NULL_V(data, Vector<uint8_t>()); + { + uint8_t *w = ret.ptrw(); + memcpy(w, data, p_buffer_size); + } + glUnmapBuffer(p_target); +#endif + glBindBuffer(p_target, 0); + return ret; +} + +/* INSTANCES */ + +RS::InstanceType Utilities::get_base_type(RID p_rid) const { + if (GLES3::MeshStorage::get_singleton()->owns_mesh(p_rid)) { + return RS::INSTANCE_MESH; + } else if (GLES3::MeshStorage::get_singleton()->owns_multimesh(p_rid)) { + return RS::INSTANCE_MULTIMESH; + } else if (GLES3::LightStorage::get_singleton()->owns_light(p_rid)) { + return RS::INSTANCE_LIGHT; + } + return RS::INSTANCE_NONE; +} + +bool Utilities::free(RID p_rid) { + if (GLES3::TextureStorage::get_singleton()->owns_render_target(p_rid)) { + GLES3::TextureStorage::get_singleton()->render_target_free(p_rid); + return true; + } else if (GLES3::TextureStorage::get_singleton()->owns_texture(p_rid)) { + GLES3::TextureStorage::get_singleton()->texture_free(p_rid); + return true; + } else if (GLES3::TextureStorage::get_singleton()->owns_canvas_texture(p_rid)) { + GLES3::TextureStorage::get_singleton()->canvas_texture_free(p_rid); + return true; + } else if (GLES3::MaterialStorage::get_singleton()->owns_shader(p_rid)) { + GLES3::MaterialStorage::get_singleton()->shader_free(p_rid); + return true; + } else if (GLES3::MaterialStorage::get_singleton()->owns_material(p_rid)) { + GLES3::MaterialStorage::get_singleton()->material_free(p_rid); + return true; + } else if (GLES3::MeshStorage::get_singleton()->owns_mesh(p_rid)) { + GLES3::MeshStorage::get_singleton()->mesh_free(p_rid); + return true; + } else if (GLES3::MeshStorage::get_singleton()->owns_multimesh(p_rid)) { + GLES3::MeshStorage::get_singleton()->multimesh_free(p_rid); + return true; + } else if (GLES3::MeshStorage::get_singleton()->owns_mesh_instance(p_rid)) { + GLES3::MeshStorage::get_singleton()->mesh_instance_free(p_rid); + return true; + } else if (GLES3::LightStorage::get_singleton()->owns_light(p_rid)) { + GLES3::LightStorage::get_singleton()->light_free(p_rid); + return true; + } else { + return false; + } + /* + else if (reflection_probe_owner.owns(p_rid)) { + // delete the texture + ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_rid); + reflection_probe->instance_remove_deps(); + + reflection_probe_owner.free(p_rid); + memdelete(reflection_probe); + + return true; + } else if (lightmap_capture_data_owner.owns(p_rid)) { + // delete the texture + LightmapCapture *lightmap_capture = lightmap_capture_data_owner.get_or_null(p_rid); + lightmap_capture->instance_remove_deps(); + + lightmap_capture_data_owner.free(p_rid); + memdelete(lightmap_capture); + return true; + + } else if (canvas_occluder_owner.owns(p_rid)) { + CanvasOccluder *co = canvas_occluder_owner.get_or_null(p_rid); + if (co->index_id) { + glDeleteBuffers(1, &co->index_id); + } + if (co->vertex_id) { + glDeleteBuffers(1, &co->vertex_id); + } + + canvas_occluder_owner.free(p_rid); + memdelete(co); + + return true; + + } else if (canvas_light_shadow_owner.owns(p_rid)) { + CanvasLightShadow *cls = canvas_light_shadow_owner.get_or_null(p_rid); + glDeleteFramebuffers(1, &cls->fbo); + glDeleteRenderbuffers(1, &cls->depth); + glDeleteTextures(1, &cls->distance); + canvas_light_shadow_owner.free(p_rid); + memdelete(cls); + + return true; + } + */ +} + +/* DEPENDENCIES */ + +void Utilities::base_update_dependency(RID p_base, DependencyTracker *p_instance) { + if (MeshStorage::get_singleton()->owns_mesh(p_base)) { + Mesh *mesh = MeshStorage::get_singleton()->get_mesh(p_base); + p_instance->update_dependency(&mesh->dependency); + } else if (MeshStorage::get_singleton()->owns_multimesh(p_base)) { + MultiMesh *multimesh = MeshStorage::get_singleton()->get_multimesh(p_base); + p_instance->update_dependency(&multimesh->dependency); + if (multimesh->mesh.is_valid()) { + base_update_dependency(multimesh->mesh, p_instance); + } + } else if (LightStorage::get_singleton()->owns_light(p_base)) { + Light *l = LightStorage::get_singleton()->get_light(p_base); + p_instance->update_dependency(&l->dependency); + } +} + +/* VISIBILITY NOTIFIER */ + +RID Utilities::visibility_notifier_allocate() { + return RID(); +} + +void Utilities::visibility_notifier_initialize(RID p_notifier) { +} + +void Utilities::visibility_notifier_free(RID p_notifier) { +} + +void Utilities::visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) { +} + +void Utilities::visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) { +} + +AABB Utilities::visibility_notifier_get_aabb(RID p_notifier) const { + return AABB(); +} + +void Utilities::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) { +} + +/* TIMING */ + +//void Utilities::render_info_begin_capture() { +// info.snap = info.render; +//} + +//void Utilities::render_info_end_capture() { +// info.snap.object_count = info.render.object_count - info.snap.object_count; +// info.snap.draw_call_count = info.render.draw_call_count - info.snap.draw_call_count; +// info.snap.material_switch_count = info.render.material_switch_count - info.snap.material_switch_count; +// info.snap.surface_switch_count = info.render.surface_switch_count - info.snap.surface_switch_count; +// info.snap.shader_rebind_count = info.render.shader_rebind_count - info.snap.shader_rebind_count; +// info.snap.vertices_count = info.render.vertices_count - info.snap.vertices_count; +// info.snap._2d_item_count = info.render._2d_item_count - info.snap._2d_item_count; +// info.snap._2d_draw_call_count = info.render._2d_draw_call_count - info.snap._2d_draw_call_count; +//} + +//int Utilities::get_captured_render_info(RS::RenderInfo p_info) { +// switch (p_info) { +// case RS::INFO_OBJECTS_IN_FRAME: { +// return info.snap.object_count; +// } break; +// case RS::INFO_VERTICES_IN_FRAME: { +// return info.snap.vertices_count; +// } break; +// case RS::INFO_MATERIAL_CHANGES_IN_FRAME: { +// return info.snap.material_switch_count; +// } break; +// case RS::INFO_SHADER_CHANGES_IN_FRAME: { +// return info.snap.shader_rebind_count; +// } break; +// case RS::INFO_SURFACE_CHANGES_IN_FRAME: { +// return info.snap.surface_switch_count; +// } break; +// case RS::INFO_DRAW_CALLS_IN_FRAME: { +// return info.snap.draw_call_count; +// } break; +// /* +// case RS::INFO_2D_ITEMS_IN_FRAME: { +// return info.snap._2d_item_count; +// } break; +// case RS::INFO_2D_DRAW_CALLS_IN_FRAME: { +// return info.snap._2d_draw_call_count; +// } break; +// */ +// default: { +// return get_render_info(p_info); +// } +// } +//} + +//int Utilities::get_render_info(RS::RenderInfo p_info) { +// switch (p_info) { +// case RS::INFO_OBJECTS_IN_FRAME: +// return info.render_final.object_count; +// case RS::INFO_VERTICES_IN_FRAME: +// return info.render_final.vertices_count; +// case RS::INFO_MATERIAL_CHANGES_IN_FRAME: +// return info.render_final.material_switch_count; +// case RS::INFO_SHADER_CHANGES_IN_FRAME: +// return info.render_final.shader_rebind_count; +// case RS::INFO_SURFACE_CHANGES_IN_FRAME: +// return info.render_final.surface_switch_count; +// case RS::INFO_DRAW_CALLS_IN_FRAME: +// return info.render_final.draw_call_count; +// /* +// case RS::INFO_2D_ITEMS_IN_FRAME: +// return info.render_final._2d_item_count; +// case RS::INFO_2D_DRAW_CALLS_IN_FRAME: +// return info.render_final._2d_draw_call_count; +//*/ +// case RS::INFO_USAGE_VIDEO_MEM_TOTAL: +// return 0; //no idea +// case RS::INFO_VIDEO_MEM_USED: +// return info.vertex_mem + info.texture_mem; +// case RS::INFO_TEXTURE_MEM_USED: +// return info.texture_mem; +// case RS::INFO_VERTEX_MEM_USED: +// return info.vertex_mem; +// default: +// return 0; //no idea either +// } +//} + +/* MISC */ + +void Utilities::update_dirty_resources() { + MaterialStorage::get_singleton()->_update_global_variables(); + MaterialStorage::get_singleton()->_update_queued_materials(); + //MeshStorage::get_singleton()->_update_dirty_skeletons(); + MeshStorage::get_singleton()->_update_dirty_multimeshes(); +} + +void Utilities::set_debug_generate_wireframes(bool p_generate) { +} + +bool Utilities::has_os_feature(const String &p_feature) const { + Config *config = Config::get_singleton(); + if (!config) { + return false; + } + + if (p_feature == "rgtc") { + return config->rgtc_supported; + } + + if (p_feature == "s3tc") { + return config->s3tc_supported; + } + + if (p_feature == "bptc") { + return config->bptc_supported; + } + + if (p_feature == "etc" || p_feature == "etc2") { + return config->etc2_supported; + } + + return false; +} + +void Utilities::update_memory_info() { +} + +uint64_t Utilities::get_rendering_info(RS::RenderingInfo p_info) { + return 0; +} + +String Utilities::get_video_adapter_name() const { + return (const char *)glGetString(GL_RENDERER); +} + +String Utilities::get_video_adapter_vendor() const { + return (const char *)glGetString(GL_VENDOR); +} + +RenderingDevice::DeviceType Utilities::get_video_adapter_type() const { + return RenderingDevice::DeviceType::DEVICE_TYPE_OTHER; +} + +String Utilities::get_video_adapter_api_version() const { + return (const char *)glGetString(GL_VERSION); +} + +#endif // GLES3_ENABLED diff --git a/drivers/gles3/storage/utilities.h b/drivers/gles3/storage/utilities.h new file mode 100644 index 0000000000..523033886c --- /dev/null +++ b/drivers/gles3/storage/utilities.h @@ -0,0 +1,159 @@ +/*************************************************************************/ +/* utilities.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef UTILITIES_GLES3_H +#define UTILITIES_GLES3_H + +#ifdef GLES3_ENABLED + +#include "servers/rendering/storage/utilities.h" + +#include "platform_config.h" +#ifndef OPENGL_INCLUDE_H +#include <GLES3/gl3.h> +#else +#include OPENGL_INCLUDE_H +#endif + +namespace GLES3 { + +class Utilities : public RendererUtilities { +private: + static Utilities *singleton; + +public: + static Utilities *get_singleton() { return singleton; } + + Utilities(); + ~Utilities(); + + // Buffer size is specified in bytes + static Vector<uint8_t> buffer_get_data(GLenum p_target, GLuint p_buffer, uint32_t p_buffer_size); + + /* INSTANCES */ + + virtual RS::InstanceType get_base_type(RID p_rid) const override; + virtual bool free(RID p_rid) override; + + /* DEPENDENCIES */ + + virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override; + + /* VISIBILITY NOTIFIER */ + virtual RID visibility_notifier_allocate() override; + virtual void visibility_notifier_initialize(RID p_notifier) override; + virtual void visibility_notifier_free(RID p_notifier) override; + + virtual void visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) override; + virtual void visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) override; + + virtual AABB visibility_notifier_get_aabb(RID p_notifier) const override; + virtual void visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) override; + + /* TIMING */ + + struct Info { + uint64_t texture_mem = 0; + uint64_t vertex_mem = 0; + + struct Render { + uint32_t object_count; + uint32_t draw_call_count; + uint32_t material_switch_count; + uint32_t surface_switch_count; + uint32_t shader_rebind_count; + uint32_t vertices_count; + uint32_t _2d_item_count; + uint32_t _2d_draw_call_count; + + void reset() { + object_count = 0; + draw_call_count = 0; + material_switch_count = 0; + surface_switch_count = 0; + shader_rebind_count = 0; + vertices_count = 0; + _2d_item_count = 0; + _2d_draw_call_count = 0; + } + } render, render_final, snap; + + Info() { + render.reset(); + render_final.reset(); + } + + } info; + + virtual void capture_timestamps_begin() override {} + virtual void capture_timestamp(const String &p_name) override {} + virtual uint32_t get_captured_timestamps_count() const override { + return 0; + } + virtual uint64_t get_captured_timestamps_frame() const override { + return 0; + } + virtual uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const override { + return 0; + } + virtual uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const override { + return 0; + } + virtual String get_captured_timestamp_name(uint32_t p_index) const override { + return String(); + } + + // void render_info_begin_capture() override; + // void render_info_end_capture() override; + // int get_captured_render_info(RS::RenderInfo p_info) override; + + // int get_render_info(RS::RenderInfo p_info) override; + + /* MISC */ + + virtual void update_dirty_resources() override; + virtual void set_debug_generate_wireframes(bool p_generate) override; + + virtual bool has_os_feature(const String &p_feature) const override; + + virtual void update_memory_info() override; + + virtual uint64_t get_rendering_info(RS::RenderingInfo p_info) override; + virtual String get_video_adapter_name() const override; + virtual String get_video_adapter_vendor() const override; + virtual RenderingDevice::DeviceType get_video_adapter_type() const override; + virtual String get_video_adapter_api_version() const override; +}; + +} // namespace GLES3 + +#endif // GLES3_ENABLED + +#endif // !UTILITIES_GLES3_H diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp index 7e6105f033..c4b42806fd 100644 --- a/drivers/unix/dir_access_unix.cpp +++ b/drivers/unix/dir_access_unix.cpp @@ -33,6 +33,7 @@ #if defined(UNIX_ENABLED) || defined(LIBC_FILEIO_ENABLED) #include "core/os/memory.h" +#include "core/os/os.h" #include "core/string/print_string.h" #include "core/templates/list.h" @@ -49,10 +50,6 @@ #include <mntent.h> #endif -Ref<DirAccess> DirAccessUnix::create_fs() { - return memnew(DirAccessUnix); -} - Error DirAccessUnix::list_dir_begin() { list_dir_end(); //close any previous dir opening! @@ -216,10 +213,11 @@ static bool _filter_drive(struct mntent *mnt) { #endif static void _get_drives(List<String> *list) { + // Add root. list->push_back("/"); #if defined(HAVE_MNTENT) && defined(X11_ENABLED) - // Check /etc/mtab for the list of mounted partitions + // Check /etc/mtab for the list of mounted partitions. FILE *mtab = setmntent("/etc/mtab", "r"); if (mtab) { struct mntent mnt; @@ -239,7 +237,7 @@ static void _get_drives(List<String> *list) { } #endif - // Add $HOME + // Add $HOME. const char *home = getenv("HOME"); if (home) { // Only add if it's not a duplicate @@ -248,7 +246,8 @@ static void _get_drives(List<String> *list) { list->push_back(home_name); } - // Check $HOME/.config/gtk-3.0/bookmarks + // Check GTK+3 bookmarks for both XDG locations (Documents, Downloads, etc.) + // and potential user-defined bookmarks. char path[1024]; snprintf(path, 1024, "%s/.config/gtk-3.0/bookmarks", home); FILE *fd = fopen(path, "r"); @@ -257,7 +256,7 @@ static void _get_drives(List<String> *list) { while (fgets(string, 1024, fd)) { // Parse only file:// links if (strncmp(string, "file://", 7) == 0) { - // Strip any unwanted edges on the strings and push_back if it's not a duplicate + // Strip any unwanted edges on the strings and push_back if it's not a duplicate. String fpath = String::utf8(string + 7).strip_edges().split_spaces()[0].uri_decode(); if (!list->find(fpath)) { list->push_back(fpath); @@ -267,6 +266,12 @@ static void _get_drives(List<String> *list) { fclose(fd); } + + // Add Desktop dir. + String dpath = OS::get_singleton()->get_system_dir(OS::SystemDir::SYSTEM_DIR_DESKTOP); + if (dpath.length() > 0 && !list->find(dpath)) { + list->push_back(dpath); + } } list->sort(); diff --git a/drivers/unix/dir_access_unix.h b/drivers/unix/dir_access_unix.h index 69530de337..5e2129b74a 100644 --- a/drivers/unix/dir_access_unix.h +++ b/drivers/unix/dir_access_unix.h @@ -43,13 +43,11 @@ class DirAccessUnix : public DirAccess { DIR *dir_stream = nullptr; - static Ref<DirAccess> create_fs(); - - String current_dir; bool _cisdir = false; bool _cishidden = false; protected: + String current_dir; virtual String fix_unicode_name(const char *p_name) const { return String::utf8(p_name); } virtual bool is_hidden(const String &p_name); diff --git a/drivers/unix/file_access_unix.cpp b/drivers/unix/file_access_unix.cpp index e0b2994b63..99836b7bea 100644 --- a/drivers/unix/file_access_unix.cpp +++ b/drivers/unix/file_access_unix.cpp @@ -333,10 +333,6 @@ Error FileAccessUnix::_set_unix_permissions(const String &p_file, uint32_t p_per return FAILED; } -Ref<FileAccess> FileAccessUnix::create_libc() { - return memnew(FileAccessUnix); -} - CloseNotificationFunc FileAccessUnix::close_notification_func = nullptr; FileAccessUnix::~FileAccessUnix() { diff --git a/drivers/unix/file_access_unix.h b/drivers/unix/file_access_unix.h index 4340bbbc82..0261b8be53 100644 --- a/drivers/unix/file_access_unix.h +++ b/drivers/unix/file_access_unix.h @@ -49,7 +49,6 @@ class FileAccessUnix : public FileAccess { String path; String path_src; - static Ref<FileAccess> create_libc(); void _close(); public: diff --git a/editor/doc_tools.cpp b/editor/doc_tools.cpp index e6cd1e0b48..a6c7970264 100644 --- a/editor/doc_tools.cpp +++ b/editor/doc_tools.cpp @@ -178,6 +178,20 @@ void DocTools::merge_from(const DocTools &p_data) { } } + for (int i = 0; i < c.annotations.size(); i++) { + DocData::MethodDoc &m = c.annotations.write[i]; + + for (int j = 0; j < cf.annotations.size(); j++) { + if (cf.annotations[j].name != m.name) { + continue; + } + const DocData::MethodDoc &mf = cf.annotations[j]; + + m.description = mf.description; + break; + } + } + for (int i = 0; i < c.properties.size(); i++) { DocData::PropertyDoc &p = c.properties.write[i]; @@ -429,7 +443,7 @@ void DocTools::generate(bool p_basic_types) { PropertyInfo retinfo = mb->get_return_info(); found_type = true; - if (retinfo.type == Variant::INT && retinfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (retinfo.type == Variant::INT && retinfo.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { prop.enumeration = retinfo.class_name; prop.type = "int"; } else if (retinfo.class_name != StringName()) { @@ -575,6 +589,7 @@ void DocTools::generate(bool p_basic_types) { constant.value = itos(ClassDB::get_integer_constant(name, E)); constant.is_value_valid = true; constant.enumeration = ClassDB::get_integer_constant_enum(name, E); + constant.is_bitfield = ClassDB::is_enum_bitfield(name, constant.enumeration); c.constants.push_back(constant); } @@ -959,8 +974,41 @@ void DocTools::generate(bool p_basic_types) { c.constants.push_back(cd); } + // Get annotations. + List<MethodInfo> ainfo; + lang->get_public_annotations(&ainfo); + + for (const MethodInfo &ai : ainfo) { + DocData::MethodDoc atd; + atd.name = ai.name; + + if (ai.flags & METHOD_FLAG_VARARG) { + if (!atd.qualifiers.is_empty()) { + atd.qualifiers += " "; + } + atd.qualifiers += "vararg"; + } + + DocData::return_doc_from_retinfo(atd, ai.return_val); + + for (int j = 0; j < ai.arguments.size(); j++) { + DocData::ArgumentDoc ad; + DocData::argument_doc_from_arginfo(ad, ai.arguments[j]); + + int darg_idx = j - (ai.arguments.size() - ai.default_arguments.size()); + if (darg_idx >= 0) { + Variant default_arg = ai.default_arguments[darg_idx]; + ad.default_value = default_arg.get_construct_string().replace("\n", " "); + } + + atd.arguments.push_back(ad); + } + + c.annotations.push_back(atd); + } + // Skip adding the lang if it doesn't expose anything (e.g. C#). - if (c.methods.is_empty() && c.constants.is_empty()) { + if (c.methods.is_empty() && c.constants.is_empty() && c.annotations.is_empty()) { continue; } @@ -1162,6 +1210,9 @@ Error DocTools::_load(Ref<XMLParser> parser) { } else if (name2 == "signals") { Error err2 = _parse_methods(parser, c.signals); ERR_FAIL_COND_V(err2, err2); + } else if (name2 == "annotations") { + Error err2 = _parse_methods(parser, c.annotations); + ERR_FAIL_COND_V(err2, err2); } else if (name2 == "members") { while (parser->read() == OK) { if (parser->get_node_type() == XMLParser::NODE_ELEMENT) { @@ -1244,6 +1295,9 @@ Error DocTools::_load(Ref<XMLParser> parser) { if (parser->has_attribute("enum")) { constant2.enumeration = parser->get_attribute_value("enum"); } + if (parser->has_attribute("is_bitfield")) { + constant2.is_bitfield = parser->get_attribute_value("is_bitfield").to_lower() == "true"; + } if (!parser->is_empty()) { parser->read(); if (parser->get_node_type() == XMLParser::NODE_TEXT) { @@ -1424,7 +1478,11 @@ Error DocTools::save_classes(const String &p_default_path, const HashMap<String, const DocData::ConstantDoc &k = c.constants[i]; if (k.is_value_valid) { if (!k.enumeration.is_empty()) { - _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); + if (k.is_bitfield) { + _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\" is_bitfield=\"true\">"); + } else { + _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); + } } else { _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">"); } @@ -1442,6 +1500,8 @@ Error DocTools::save_classes(const String &p_default_path, const HashMap<String, _write_string(f, 1, "</constants>"); } + _write_method_doc(f, "annotation", c.annotations); + if (!c.theme_properties.is_empty()) { c.theme_properties.sort(); diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 64c234a07c..e9e3320a3d 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -534,6 +534,7 @@ void EditorData::remove_scene(int p_idx) { } memdelete(edited_scene[p_idx].root); + edited_scene.write[p_idx].root = nullptr; } if (current_edited_scene > p_idx) { diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 36360954d9..48d4b96a67 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -125,6 +125,9 @@ void EditorHelp::_class_desc_select(const String &p_select) { } else if (tag == "constant") { topic = "class_constant"; table = &this->constant_line; + } else if (tag == "annotation") { + topic = "class_annotation"; + table = &this->annotation_line; } else if (tag == "theme_item") { topic = "theme_item"; table = &this->theme_property_line; @@ -274,7 +277,7 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview class_desc->add_text(" "); } - if (p_overview && !p_method.description.is_empty()) { + if (p_overview && !p_method.description.strip_edges().is_empty()) { class_desc->push_meta("@method " + p_method.name); } @@ -282,7 +285,7 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview _add_text(p_method.name); class_desc->pop(); - if (p_overview && !p_method.description.is_empty()) { + if (p_overview && !p_method.description.strip_edges().is_empty()) { class_desc->pop(); //meta } @@ -412,7 +415,7 @@ void EditorHelp::_update_method_list(const Vector<DocData::MethodDoc> p_methods, class_desc->pop(); //cell } - if (!m[i].description.is_empty() || m[i].errors_returned.size() > 0) { + if (!m[i].description.strip_edges().is_empty() || m[i].errors_returned.size() > 0) { r_method_descrpitons = true; } @@ -611,7 +614,7 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); // Brief description - if (!cd.brief_description.is_empty()) { + if (!cd.brief_description.strip_edges().is_empty()) { class_desc->push_color(text_color); class_desc->push_font(doc_bold_font); class_desc->push_indent(1); @@ -625,7 +628,7 @@ void EditorHelp::_update_doc() { } // Class description - if (!cd.description.is_empty()) { + if (!cd.description.strip_edges().is_empty()) { section_line.push_back(Pair<String, int>(TTR("Description"), class_desc->get_paragraph_count() - 2)); description_line = class_desc->get_paragraph_count() - 2; class_desc->push_color(title_color); @@ -692,7 +695,7 @@ void EditorHelp::_update_doc() { if (cd.is_script_doc) { has_properties = false; for (int i = 0; i < cd.properties.size(); i++) { - if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.is_empty()) { + if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.strip_edges().is_empty()) { continue; } has_properties = true; @@ -718,7 +721,7 @@ void EditorHelp::_update_doc() { for (int i = 0; i < cd.properties.size(); i++) { // Ignore undocumented private. - if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.is_empty()) { + if (cd.properties[i].name.begins_with("_") && cd.properties[i].description.strip_edges().is_empty()) { continue; } property_line[cd.properties[i].name] = class_desc->get_paragraph_count() - 2; //gets overridden if description @@ -743,7 +746,7 @@ void EditorHelp::_update_doc() { describe = true; } - if (!cd.properties[i].description.is_empty()) { + if (!cd.properties[i].description.strip_edges().is_empty()) { describe = true; } @@ -856,7 +859,7 @@ void EditorHelp::_update_doc() { } } // Ignore undocumented non virtual private. - if (cd.methods[i].name.begins_with("_") && cd.methods[i].description.is_empty() && !cd.methods[i].qualifiers.contains("virtual")) { + if (cd.methods[i].name.begins_with("_") && cd.methods[i].description.strip_edges().is_empty() && !cd.methods[i].qualifiers.contains("virtual")) { continue; } methods.push_back(cd.methods[i]); @@ -976,7 +979,7 @@ void EditorHelp::_update_doc() { class_desc->pop(); // monofont // Theme item description. - if (!cd.theme_properties[i].description.is_empty()) { + if (!cd.theme_properties[i].description.strip_edges().is_empty()) { class_desc->push_font(doc_font); class_desc->push_color(comment_color); class_desc->push_indent(1); @@ -1018,8 +1021,8 @@ void EditorHelp::_update_doc() { signal_line[cd.signals[i].name] = class_desc->get_paragraph_count() - 2; // Gets overridden if description. class_desc->push_font(doc_code_font); // monofont - class_desc->push_color(headline_color); _add_bulletpoint(); + class_desc->push_color(headline_color); _add_text(cd.signals[i].name); class_desc->pop(); class_desc->push_color(symbol_color); @@ -1048,7 +1051,7 @@ void EditorHelp::_update_doc() { class_desc->add_text(")"); class_desc->pop(); class_desc->pop(); // end monofont - if (!cd.signals[i].description.is_empty()) { + if (!cd.signals[i].description.strip_edges().is_empty()) { class_desc->push_font(doc_font); class_desc->push_color(comment_color); class_desc->push_indent(1); @@ -1079,7 +1082,7 @@ void EditorHelp::_update_doc() { enums[cd.constants[i].enumeration].push_back(cd.constants[i]); } else { // Ignore undocumented private. - if (cd.constants[i].name.begins_with("_") && cd.constants[i].description.is_empty()) { + if (cd.constants[i].name.begins_with("_") && cd.constants[i].description.strip_edges().is_empty()) { continue; } constants.push_back(cd.constants[i]); @@ -1105,7 +1108,11 @@ void EditorHelp::_update_doc() { class_desc->push_font(doc_code_font); class_desc->push_color(title_color); - class_desc->add_text("enum "); + if (E.value.size() && E.value[0].is_bitfield) { + class_desc->add_text("flags "); + } else { + class_desc->add_text("enum "); + } class_desc->pop(); String e = E.key; if ((e.get_slice_count(".") > 1) && (e.get_slice(".", 0) == edited_class)) { @@ -1151,8 +1158,8 @@ void EditorHelp::_update_doc() { constant_line[enum_list[i].name] = class_desc->get_paragraph_count() - 2; class_desc->push_font(doc_code_font); - class_desc->push_color(headline_color); _add_bulletpoint(); + class_desc->push_color(headline_color); _add_text(enum_list[i].name); class_desc->pop(); class_desc->push_color(symbol_color); @@ -1236,7 +1243,7 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); - if (!constants[i].description.is_empty()) { + if (!constants[i].description.strip_edges().is_empty()) { class_desc->push_font(doc_font); class_desc->push_color(comment_color); _add_text(DTR(constants[i].description)); @@ -1255,6 +1262,112 @@ void EditorHelp::_update_doc() { } } + // Annotations + if (!cd.annotations.is_empty()) { + if (sort_methods) { + cd.annotations.sort(); + } + + section_line.push_back(Pair<String, int>(TTR("Annotations"), class_desc->get_paragraph_count() - 2)); + class_desc->push_color(title_color); + class_desc->push_font(doc_title_font); + class_desc->push_font_size(doc_title_font_size); + class_desc->add_text(TTR("Annotations")); + class_desc->pop(); // font size + class_desc->pop(); // font + class_desc->pop(); // color + + class_desc->add_newline(); + class_desc->add_newline(); + + class_desc->push_indent(1); + + for (int i = 0; i < cd.annotations.size(); i++) { + annotation_line[cd.annotations[i].name] = class_desc->get_paragraph_count() - 2; // Gets overridden if description. + + class_desc->push_font(doc_code_font); // monofont + _add_bulletpoint(); + class_desc->push_color(headline_color); + _add_text(cd.annotations[i].name); + class_desc->pop(); + + if (cd.annotations[i].arguments.size() > 0) { + class_desc->push_color(symbol_color); + class_desc->add_text("("); + class_desc->pop(); + for (int j = 0; j < cd.annotations[i].arguments.size(); j++) { + class_desc->push_color(text_color); + if (j > 0) { + class_desc->add_text(", "); + } + + _add_text(cd.annotations[i].arguments[j].name); + class_desc->add_text(": "); + _add_type(cd.annotations[i].arguments[j].type); + if (!cd.annotations[i].arguments[j].default_value.is_empty()) { + class_desc->push_color(symbol_color); + class_desc->add_text(" = "); + class_desc->pop(); + _add_text(cd.annotations[i].arguments[j].default_value); + } + + class_desc->pop(); + } + + if (cd.annotations[i].qualifiers.contains("vararg")) { + class_desc->push_color(text_color); + if (cd.annotations[i].arguments.size()) { + class_desc->add_text(", "); + } + class_desc->push_color(symbol_color); + class_desc->add_text("..."); + class_desc->pop(); + class_desc->pop(); + } + + class_desc->push_color(symbol_color); + class_desc->add_text(")"); + class_desc->pop(); + } + + if (!cd.annotations[i].qualifiers.is_empty()) { + class_desc->push_color(qualifier_color); + class_desc->add_text(" "); + _add_text(cd.annotations[i].qualifiers); + class_desc->pop(); + } + + class_desc->pop(); // end monofont + + if (!cd.annotations[i].description.strip_edges().is_empty()) { + class_desc->push_font(doc_font); + class_desc->push_color(comment_color); + class_desc->push_indent(1); + _add_text(DTR(cd.annotations[i].description)); + class_desc->pop(); // indent + class_desc->pop(); + class_desc->pop(); // font + } else { + class_desc->push_indent(1); + class_desc->add_image(get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))); + class_desc->add_text(" "); + class_desc->push_color(comment_color); + if (cd.is_script_doc) { + class_desc->append_text(TTR("There is currently no description for this annotation.")); + } else { + class_desc->append_text(TTR("There is currently no description for this annotation. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + } + class_desc->pop(); + class_desc->pop(); // indent + } + class_desc->add_newline(); + class_desc->add_newline(); + } + + class_desc->pop(); + class_desc->add_newline(); + } + // Property descriptions if (property_descr) { section_line.push_back(Pair<String, int>(TTR("Property Descriptions"), class_desc->get_paragraph_count() - 2)); @@ -1501,6 +1614,10 @@ void EditorHelp::_help_callback(const String &p_topic) { if (constant_line.has(name)) { line = constant_line[name]; } + } else if (what == "class_annotation") { + if (annotation_line.has(name)) { + line = annotation_line[name]; + } } else if (what == "class_global") { if (constant_line.has(name)) { line = constant_line[name]; diff --git a/editor/editor_help.h b/editor/editor_help.h index 7f91a8102d..9f8da938f1 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -110,6 +110,7 @@ class EditorHelp : public VBoxContainer { HashMap<String, int> property_line; HashMap<String, int> theme_property_line; HashMap<String, int> constant_line; + HashMap<String, int> annotation_line; HashMap<String, int> enum_line; HashMap<String, HashMap<String, int>> enum_values_line; int description_line = 0; diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 70622e85ff..6a035225e5 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -3175,7 +3175,20 @@ bool EditorPropertyNodePath::is_drop_valid(const Dictionary &p_drag_data) const return false; } Array nodes = p_drag_data["nodes"]; - return nodes.size() == 1; + if (nodes.size() != 1) { + return false; + } + + Node *dropped_node = get_tree()->get_edited_scene_root()->get_node(nodes[0]); + ERR_FAIL_NULL_V(dropped_node, false); + + for (const StringName &E : valid_types) { + if (dropped_node->is_class(E)) { + return true; + } + } + + return false; } void EditorPropertyNodePath::update_property() { diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index dea4aaded7..22788913d4 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -813,9 +813,17 @@ Vector2 CanvasItemEditor::_position_to_anchor(const Control *p_control, Vector2 } void CanvasItemEditor::_save_canvas_item_state(List<CanvasItem *> p_canvas_items, bool save_bones) { + original_transform = Transform2D(); + bool transform_stored = false; + for (CanvasItem *canvas_item : p_canvas_items) { CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item); if (se) { + if (!transform_stored) { + original_transform = canvas_item->get_global_transform(); + transform_stored = true; + } + se->undo_state = canvas_item->_edit_get_state(); se->pre_drag_xform = canvas_item->get_global_transform_with_canvas(); if (canvas_item->_edit_use_rect()) { @@ -3624,6 +3632,67 @@ void CanvasItemEditor::_draw_hover() { } } +void CanvasItemEditor::_draw_transform_message() { + if (drag_selection.is_empty() || !drag_selection.front()->get()) { + return; + } + String transform_message; + Transform2D current_transform = drag_selection.front()->get()->get_global_transform(); + + double snap = EDITOR_GET("interface/inspector/default_float_step"); + int snap_step_decimals = Math::range_step_decimals(snap); +#define FORMAT(value) (TS->format_number(String::num(value, snap_step_decimals))) + + switch (drag_type) { + case DRAG_MOVE: + case DRAG_MOVE_X: + case DRAG_MOVE_Y: { + Vector2 delta = current_transform.get_origin() - original_transform.get_origin(); + if (drag_type == DRAG_MOVE) { + transform_message = TTR("Moving:") + " (" + FORMAT(delta.x) + ", " + FORMAT(delta.y) + ") px"; + } else if (drag_type == DRAG_MOVE_X) { + transform_message = TTR("Moving:") + " " + FORMAT(delta.x) + " px"; + } else if (drag_type == DRAG_MOVE_Y) { + transform_message = TTR("Moving:") + " " + FORMAT(delta.y) + " px"; + } + } break; + + case DRAG_ROTATE: { + real_t delta = Math::rad2deg(current_transform.get_rotation() - original_transform.get_rotation()); + transform_message = TTR("Rotating:") + " " + FORMAT(delta) + String::utf8(" °"); + } break; + + case DRAG_SCALE_X: + case DRAG_SCALE_Y: + case DRAG_SCALE_BOTH: { + Vector2 original_scale = (Math::is_zero_approx(original_transform.get_scale().x) || Math::is_zero_approx(original_transform.get_scale().y)) ? Vector2(CMP_EPSILON, CMP_EPSILON) : original_transform.get_scale(); + Vector2 delta = current_transform.get_scale() / original_scale; + if (drag_type == DRAG_SCALE_BOTH) { + transform_message = TTR("Scaling:") + String::utf8(" ×(") + FORMAT(delta.x) + ", " + FORMAT(delta.y) + ")"; + } else if (drag_type == DRAG_SCALE_X) { + transform_message = TTR("Scaling:") + String::utf8(" ×") + FORMAT(delta.x); + } else if (drag_type == DRAG_SCALE_Y) { + transform_message = TTR("Scaling:") + String::utf8(" ×") + FORMAT(delta.y); + } + } break; + + default: + break; + } +#undef FORMAT + + if (transform_message.is_empty()) { + return; + } + + Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); + int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Point2 msgpos = Point2(RULER_WIDTH + 5 * EDSCALE, viewport->get_size().y - 20 * EDSCALE); + viewport->draw_string(font, msgpos + Point2(1, 1), transform_message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); + viewport->draw_string(font, msgpos + Point2(-1, -1), transform_message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); + viewport->draw_string(font, msgpos, transform_message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1, 1, 1, 1)); +} + void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform) { ERR_FAIL_COND(!p_node); @@ -3735,6 +3804,7 @@ void CanvasItemEditor::_draw_viewport() { _draw_smart_snapping(); _draw_focus(); _draw_hover(); + _draw_transform_message(); } void CanvasItemEditor::update_viewport() { diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index c20a054800..5f50882dba 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -347,6 +347,7 @@ private: bool is_hovering_v_guide = false; bool updating_value_dialog = false; + Transform2D original_transform; Point2 box_selecting_to; @@ -433,6 +434,7 @@ private: void _draw_invisible_nodes_positions(Node *p_node, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); void _draw_locks_and_groups(Node *p_node, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); void _draw_hover(); + void _draw_transform_message(); void _draw_viewport(); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 8d62d0a20d..7730f7f294 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -4702,7 +4702,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p frame_time_gradient->add_point(0.5, Color()); top_right_vbox = memnew(VBoxContainer); - top_right_vbox->set_anchors_and_offsets_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 2.0 * EDSCALE); + top_right_vbox->set_anchors_and_offsets_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 10.0 * EDSCALE); top_right_vbox->set_h_grow_direction(GROW_DIRECTION_BEGIN); // Make sure frame time labels don't touch the viewport's edge. top_right_vbox->set_custom_minimum_size(Size2(100, 0) * EDSCALE); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 7d4ffd1a25..7c3520c39d 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -886,6 +886,9 @@ void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_c emit_signal(SNAME("go_to_help"), "class_enum:" + result.class_name + ":" + result.class_member); } break; + case ScriptLanguage::LOOKUP_RESULT_CLASS_ANNOTATION: { + emit_signal(SNAME("go_to_help"), "class_annotation:" + result.class_name + ":" + result.class_member); + } break; case ScriptLanguage::LOOKUP_RESULT_CLASS_TBD_GLOBALSCOPE: { emit_signal(SNAME("go_to_help"), "class_global:" + result.class_name + ":" + result.class_member); } break; diff --git a/editor/translations/af.po b/editor/translations/af.po index 00c05287a1..db28610435 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -413,6 +413,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Aktiveer" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5556,6 +5561,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Alle Seleksie" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18703,6 +18713,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Anim Dupliseer Sleutels" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18711,6 +18726,16 @@ msgstr "" msgid "Export Format" msgstr "Anim Verander Transform" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Afhanklikheid Bewerker" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Skrap" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18747,16 +18772,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Afhanklikheid Bewerker" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Skrap" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18994,12 +19009,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19008,17 +19023,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20645,7 +20680,7 @@ msgstr "Zoem In" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21355,6 +21390,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Konstant" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Installeer" @@ -21363,29 +21403,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Aktiveer" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktiveer" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktiveer" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24563,6 +24608,11 @@ msgstr "Skep Vouer" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Slegs Seleksie" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktiveer" @@ -24947,16 +24997,17 @@ msgstr "Fokus Pad" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/ar.po b/editor/translations/ar.po index f449036b53..93bc2971e8 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -64,13 +64,14 @@ # ywmaa <ywmaa.personal@gmail.com>, 2022. # Awab Najim <dev.djvan@gmail.com>, 2022. # Abderrahim <abdoudido117@gmail.com>, 2022. +# Jhon Smith <jhonsmaith3@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-29 10:04+0000\n" -"Last-Translator: Awab Najim <dev.djvan@gmail.com>\n" +"PO-Revision-Date: 2022-07-05 07:17+0000\n" +"Last-Translator: Jhon Smith <jhonsmaith3@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -447,6 +448,11 @@ msgstr "المرجعية الذاتية (Meta)" msgid "Command" msgstr "Ù…ÙØªØ§Ø Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (Ùيزيائي)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5592,6 +5598,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "تنقل ÙÙŠ سجل أزرار الماوس الإضاÙية" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "تØديد الملئ خريطة-الشبكة" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "المظهر" @@ -9672,7 +9683,7 @@ msgstr "الأيقونة" #: editor/plugins/item_list_editor_plugin.cpp msgid "ID" -msgstr "" +msgstr "بطاقة تعريÙ" #: editor/plugins/item_list_editor_plugin.cpp #: scene/resources/default_theme/default_theme.cpp @@ -10748,11 +10759,11 @@ msgstr "توقÙ" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "استمرار" +msgstr "يكمل" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "إبقاء منÙÙ‚ØªØ Ø§Ù„Ø£Ø®Ø·Ø§Ø¡ البرمجية Ù…ÙتوØاً" +msgstr "إبقاء المصØØ Ù…ÙتوØًا" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" @@ -18844,6 +18855,11 @@ msgid "The package must have at least one '.' separator." msgstr "يجب أن تتضمن الرزمة على الأقل واØد من الÙواصل '.' ." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "قص العÙقد" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18852,6 +18868,16 @@ msgstr "" msgid "Export Format" msgstr "مسار التصدير" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Øجم الخطوط:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "الهدÙ" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18895,16 +18921,6 @@ msgstr "تÙØص النمذجة السابقة" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Øجم الخطوط:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "الهدÙ" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19164,7 +19180,7 @@ msgstr "يجب تÙعيل \"Use Custom Build\" لإستخدام الإضاÙات #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" تكون صالØØ© Ùقط عندما يكون وضع ال \"Xr Mode\"هو \"Oculus " @@ -19172,7 +19188,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Hand Tracking\" تكون صالØØ© Ùقط عندما يكون وضع ال \"Xr Mode\"هو \"Oculus " "Mobile VR\"." @@ -19186,22 +19202,43 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "ÙŠØµØ¨Ø Ø®ÙŠØ§Ø± \"تصدير ABB\" صالØاً Ùقط عندما يتم اختيار \"استعمال تصدير مخصص " "Custom Build\"." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "ÙŠØµØ¨Ø Ø®ÙŠØ§Ø± \"تصدير ABB\" صالØاً Ùقط عندما يتم اختيار \"استعمال تصدير مخصص " "Custom Build\"." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "إصدار \"Øزمة التطوير البرمجية المستهدÙØ©\" يجب أن يكون أعلى من أو يساوي إصدار " "\"Min Sdk\"." @@ -20874,7 +20911,7 @@ msgstr "تكبير" msgid "Custom Viewport" msgstr "ساØØ© رؤية واØدة" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21655,6 +21692,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "الربط" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "اختر المساÙØ©:" @@ -21663,6 +21705,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "اختر المساÙØ©:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "إعدادات متقدمة" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "تÙعيل" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21680,16 +21737,6 @@ msgstr "القلب Ø£Ùقياً" msgid "Max Speed" msgstr "السرعة:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "اختر المساÙØ©:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "تÙعيل" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25122,6 +25169,11 @@ msgstr "مجلد:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "المØدد Ùقط" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "تÙعيل" @@ -25525,17 +25577,6 @@ msgid "Viewport Path" 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 "" -"لم يتم تعيين منÙØ° العرض هذا كهد٠عرض. إذا كنت تنوي عرض Ù…Øتوياته مباشرة على " -"الشاشة ØŒ اجعله تابعًا لعنصر تØكم Øتى يتمكن من الØصول على الØجم. خلا٠ذلك ØŒ " -"اجعلها RenderTarget وقم بتعيين نسيجها الداخلي لبعض العقد لعرضها." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25543,6 +25584,15 @@ msgid "" msgstr "ينبغي أن يكون Øجم إطار العرض أكبر من 0 ليتم الإخراج البصري لأي شيء." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/az.po b/editor/translations/az.po index f8d5d96a7e..3701234f3d 100644 --- a/editor/translations/az.po +++ b/editor/translations/az.po @@ -407,6 +407,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Siqnalları filtirlÉ™" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5396,6 +5401,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "ÖlçmÉ™ seçimi" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18002,6 +18012,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Funksiyalar:" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18010,6 +18025,14 @@ msgstr "" msgid "Export Format" msgstr "3D Transformasya izi" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18046,14 +18069,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18279,12 +18294,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18293,17 +18308,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19848,7 +19883,7 @@ msgstr "YaxınlaÅŸdır" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20529,6 +20564,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy msgid "Path Desired Distance" msgstr "QuraÅŸdır" @@ -20538,29 +20577,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Qabaqcıl" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Siqnalları filtirlÉ™" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Siqnalları filtirlÉ™" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23636,6 +23680,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Yalnız Seçim" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Siqnalları filtirlÉ™" @@ -24002,16 +24051,17 @@ msgstr "Yol" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/bg.po b/editor/translations/bg.po index aa0fac6038..105aad00db 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -431,6 +431,11 @@ msgstr "Мета" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Включване" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5480,6 +5485,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "ÐаÑтройки" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18343,6 +18353,11 @@ msgid "The package must have at least one '.' separator." msgstr "Пакетът Ñ‚Ñ€Ñбва да има поне един разделител „.“ (точка)." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ПерÑонализиран обект" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18351,6 +18366,16 @@ msgstr "" msgid "Export Format" msgstr "Път за изнаÑÑне" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Размер на контура:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Принудително изпращане" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18392,16 +18417,6 @@ msgstr "Предишен раздел" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Размер на контура:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Принудително изпращане" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18647,12 +18662,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18662,22 +18677,45 @@ msgstr "" "ÑобÑтвена компилациÑ“." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "„Мин. верÑÐ¸Ñ Ð½Ð° SDK“ може да Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñамо когато „Използване на ÑобÑтвена " "компилациÑ“ е включено." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "„Целева верÑÐ¸Ñ Ð½Ð° SDK“ може да Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñамо когато „Използване на " "ÑобÑтвена компилациÑ“ е включено." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "„Целева верÑÐ¸Ñ Ð½Ð° SDK“ Ñ‚Ñ€Ñбва да бъде по-голÑма или равна на „Мин. верÑÐ¸Ñ Ð½Ð° " "SDK“." @@ -20333,7 +20371,7 @@ msgstr "Приближаване" msgid "Custom Viewport" msgstr "1 прозорец за изглед" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21081,6 +21119,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ОтÑтъп" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Изберете главна Ñцена" @@ -21089,6 +21132,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Включване" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Включване" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21106,15 +21163,6 @@ msgstr "Хоризонтала:" msgid "Max Speed" msgstr "СкороÑÑ‚:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Включване" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -24391,6 +24439,11 @@ msgstr "Папка:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Само избраното" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Включване" @@ -24788,16 +24841,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/bn.po b/editor/translations/bn.po index b3c338168c..0e99518ac1 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -421,6 +421,11 @@ msgstr "" msgid "Command" msgstr "সমà§à¦ªà§à¦°à¦¦à¦¾à§Ÿ" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "সà§à¦¥à¦¿à¦°/বদà§à¦§ ফà§à¦°à§‡à¦® %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5807,6 +5812,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19778,6 +19788,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "নোড-সমূহ করà§à¦¤à¦¨/কাট করà§à¦¨" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19786,6 +19801,16 @@ msgstr "" msgid "Export Format" msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° পà§à¦°à¦¿à¦¸à§‡à¦Ÿ:" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "টারà§à¦—েট" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19827,16 +19852,6 @@ msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ পরà msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "টারà§à¦—েট" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -20083,12 +20098,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -20097,17 +20112,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21776,7 +21811,7 @@ msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¿à¦¤ করà§à¦¨ (জà§à¦®à§ ইন)" msgid "Custom Viewport" msgstr "১ টি Viewport" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -22535,6 +22570,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "যথেচà§à¦› ঘূরà§à¦£à¦¾à§Ÿà¦¨:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" @@ -22543,6 +22583,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -22559,16 +22614,6 @@ msgstr "" msgid "Max Speed" msgstr "গতি (FPS):" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25926,6 +25971,11 @@ msgstr "লাইন-ঠযান" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨" @@ -26327,20 +26377,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"à¦à¦‡ viewport টি render target হিসেবে নিরà§à¦§à¦¾à¦°à¦¨ করা নেই। আপনি যদি à¦à¦° বসà§à¦¤à§-সামগà§à¦°à§€ " -"সরাসরি পরà§à¦¦à¦¾à§Ÿ দেখাতে চান, à¦à¦Ÿà¦¿à¦•à§‡ যেকোনো Control à¦à¦° অংশà¦à§‚ত করà§à¦¨ যেনো à¦à¦Ÿà¦¿ à¦à¦•à¦Ÿà¦¿ " -"আকার ধারণ করতে পারে। অনà§à¦¯à¦¥à¦¾à§Ÿ, à¦à¦Ÿà¦¿à¦•à§‡ à¦à¦•à¦Ÿà¦¿ RenderTarget করà§à¦¨ à¦à¦¬à¦‚ à¦à¦° অà¦à§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ " -"দৃশà§à¦¯à¦¾à¦¬à¦²à¦¿à¦•à§‡ (texture) দৃশà§à¦¯à¦®à¦¾à¦¨ করতে কোনো নোডে হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨à¥¤" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/br.po b/editor/translations/br.po index c5d979fe2f..101a0f7581 100644 --- a/editor/translations/br.po +++ b/editor/translations/br.po @@ -397,6 +397,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Aktivañ ar Roudenn" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5305,6 +5310,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17814,6 +17823,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Fonksionoù :" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17822,6 +17836,14 @@ msgstr "" msgid "Export Format" msgstr "Roudenn Treuzfurmadur 3D" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17858,14 +17880,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18088,12 +18102,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18102,17 +18116,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19639,7 +19673,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20311,6 +20345,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20319,29 +20357,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Aktivañ ar Roudenn" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktivañ ar Roudenn" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktivañ ar Roudenn" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23379,6 +23422,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Aktivañ ar Roudenn" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktivañ ar Roudenn" @@ -23737,16 +23785,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 1e1ec84901..c9726505d3 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -409,6 +409,11 @@ msgstr "Meta" msgid "Command" msgstr "Comunitat" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fotograma de FÃsica %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5616,6 +5621,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Elimina la Selecció del GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19209,6 +19219,11 @@ msgid "The package must have at least one '.' separator." msgstr "El paquet ha de tenir com a mÃnim un separador '. '." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Talla els Nodes" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19217,6 +19232,16 @@ msgstr "" msgid "Export Format" msgstr "Camà d'exportació" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Mida del Contorn:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Objectiu" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -19259,16 +19284,6 @@ msgstr "Inspecciona la Instà ncia anterior" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Mida del Contorn:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Objectiu" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19523,12 +19538,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19537,17 +19552,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21234,7 +21269,7 @@ msgstr "Apropa" msgid "Custom Viewport" msgstr "1 Vista" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -22001,6 +22036,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Vinculació" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Trieu la distà ncia:" @@ -22009,6 +22049,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Trieu la distà ncia:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avançat" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Activar" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -22026,16 +22081,6 @@ msgstr "Volteja Horitzontalment" msgid "Max Speed" msgstr "Velocitat (FPS):" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Trieu la distà ncia:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Activar" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25451,6 +25496,11 @@ msgstr "Directori:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Selecció Només" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Activar" @@ -25858,20 +25908,17 @@ msgstr "Camà d'exportació" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"La Vista (Viewport) no és la Destinació de Renderització (render target). " -"Per mostrar-ne el contingut, especifiqueu-la com a filla d'un Control de " -"forma per tal d'obtenir-ne la mida. Altrament, establiu-la com a Destinació " -"de Renderització i assigneu-ne la textura interna a algun node." #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/cs.po b/editor/translations/cs.po index ade3299077..0c0b8b63ca 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -452,6 +452,11 @@ msgstr "" msgid "Command" msgstr "Komunita" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fyzická Klávesa" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5667,6 +5672,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap Vyplnit výbÄ›r" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18952,6 +18962,11 @@ msgid "The package must have at least one '.' separator." msgstr "BalÃÄek musà mÃt alespoň jeden '.' oddÄ›lovaÄ." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Vyjmout uzly" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18960,6 +18975,16 @@ msgstr "" msgid "Export Format" msgstr "Exportovat cestu" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Velikost obrysu:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "CÃl" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -19002,16 +19027,6 @@ msgstr "Zkontrolovat pÅ™edchozà instanci" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Velikost obrysu:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "CÃl" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19261,7 +19276,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" je platné pouze v pÅ™ÃpadÄ›, že \"Režim Xr\" má hodnotu " @@ -19269,7 +19284,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Hand Tracking\" je platné pouze v pÅ™ÃpadÄ›, že \"Režim Xr\" má hodnotu " "\"Oculus Mobile VR\"." @@ -19283,22 +19298,42 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" je validnà pouze v pÅ™ÃpadÄ›, že je povolena možnost \"PoužÃt " "vlastnà sestavu\"." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" je validnà pouze v pÅ™ÃpadÄ›, že je povolena možnost \"PoužÃt " "vlastnà sestavu\"." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20968,7 +21003,7 @@ msgstr "ZvÄ›tÅ¡it" msgid "Custom Viewport" msgstr "1 výřez" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21736,6 +21771,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Vazba" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Vybrat vzdálenost:" @@ -21744,6 +21784,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Vybrat vzdálenost:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "PokroÄilé" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Povolit" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21761,16 +21816,6 @@ msgstr "PÅ™evrátit horizontálnÄ›" msgid "Max Speed" msgstr "Rychlost:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Vybrat vzdálenost:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Povolit" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25180,6 +25225,11 @@ msgstr "Složka:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Pouze výbÄ›r" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Povolit" @@ -25585,18 +25635,6 @@ msgid "Viewport Path" msgstr "Exportovat cestu" #: 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 "" -"Tento viewport nenà nastaven jako render target. Pokud chcete jeho obsah " -"zobrazit pÅ™Ãmo na obrazovku, musÃte ho nastavit jako dÃtÄ› uzlu Control, aby " -"mohl zÃskat velikost. Jinak ho nastavte jako render target a pÅ™iÅ™aÄte jeho " -"vnitÅ™nà texturu nÄ›jakému uzlu k zobrazenÃ." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25605,6 +25643,15 @@ msgstr "" "Velikost pohledu musà být vÄ›tÅ¡Ã než 0, aby bylo možné cokoliv renderovat." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/da.po b/editor/translations/da.po index 168f98fbf1..3b19f24ec8 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -423,6 +423,11 @@ msgstr "" msgid "Command" msgstr "Fællesskab" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fysik Frame %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5720,6 +5725,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap Slet Markerede" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19157,6 +19167,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Indsæt Node" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19165,6 +19180,16 @@ msgstr "" msgid "Export Format" msgstr "Eksporter Projekt" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Skrifttype Størrelse:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Tidsskala Node" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19203,16 +19228,6 @@ msgstr "Forrige fane" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Skrifttype Størrelse:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Tidsskala Node" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19458,12 +19473,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19472,17 +19487,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21142,7 +21177,7 @@ msgstr "Zoom Ind" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21875,6 +21910,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Konstant" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Vælg en Main Scene" @@ -21883,29 +21923,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Balanceret" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktivér" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktivér" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -25177,6 +25222,11 @@ msgstr "Opret Mappe" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Kun Valgte" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktivér" @@ -25572,20 +25622,17 @@ msgstr "Eksporter Projekt" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"Denne viewport er ikke angivet som render target. Hvis du har tænkt dig for " -"at vise dens indhold direkte til skærmen, gør det til et barn af Control, sÃ¥ " -"den kan opnÃ¥ en størrelse. Ellers gør den til en RenderTarget og tildel dens " -"indre textur til en node sÃ¥ den kan vises." #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/de.po b/editor/translations/de.po index 61cfb48184..f0c79cda0f 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -87,7 +87,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-26 16:16+0000\n" +"PO-Revision-Date: 2022-06-30 16:42+0000\n" "Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" @@ -465,6 +465,11 @@ msgstr "Meta" msgid "Command" msgstr "Befehl" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (physisch)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5555,6 +5560,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "Extramaustasten blättern durch Verlauf" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap-Auswahl" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Aussehen" @@ -18439,6 +18449,11 @@ msgid "The package must have at least one '.' separator." msgstr "Das Paket muss mindestens einen Punkt-Unterteiler ‚.‘ haben." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Einen Build verwenden" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "Einen Build verwenden" @@ -18446,6 +18461,14 @@ msgstr "Einen Build verwenden" msgid "Export Format" msgstr "Exportformat" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "Min SDK" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "Ziel SDK" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "Architekturen" @@ -18482,14 +18505,6 @@ msgstr "Vorherige Installation löschen" msgid "Code" msgstr "Code" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "Min SDK" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "Ziel SDK" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "Packet" @@ -18728,15 +18743,17 @@ msgstr "" "„Use Custom Build“ muss aktiviert werden um die Plugins nutzen zu können." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "„Hand Tracking“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VrApi“ " "oder „OpenXR“ gesetzt wurde." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "„Passthrough“ ist nur gültig wenn „Xr Mode“ als „OpenXR“ gesetzt wurde." @@ -18745,22 +18762,45 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "„Export AAB“ ist nur gültig wenn „Use Custom Build“ aktiviert ist." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Das „Min Sdk“ zu ändern ist nur möglich wenn „Use Custom Build“ aktiviert " "ist." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Das „Target Sdk“ zu ändern ist nur möglich wenn „Use Custom Build“ aktiviert " "ist." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "Die Version des „Target Sdk“ muss größer gleich der des „Min Sdk“ sein." @@ -20354,7 +20394,7 @@ msgstr "Vergrößerung" msgid "Custom Viewport" msgstr "Eigenes Ansichtsfenster" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -21048,17 +21088,37 @@ msgid "" "will be removed in a future version. Use 'Navigation2DServer.map_get_path()' " "instead." msgstr "" +"‚Navigation2D‘ und ‚Navigation2D.get_simple_path()‘ sind veraltet und werden " +"in einer zukünftigen Version entfernt. Als Ersatz ist ‚Navigation2DServer." +"map_get_path()‘ zu verwenden." #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Zuordnung" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" -msgstr "Gewünschte Zieldistanz" +msgstr "Gewünschte Pfaddistanz" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Target Desired Distance" msgstr "Gewünschte Zieldistanz" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "Max Pfad-Distanz" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Erweitert" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Avoidance Enabled" +msgstr "Vermeiden aktiviert" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "Nachbardistanz" @@ -21074,14 +21134,6 @@ msgstr "Zeithorizont" msgid "Max Speed" msgstr "Max Geschw" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "Max Pfad-Distanz" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" -msgstr "Vermeiden aktiviert" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -22217,6 +22269,9 @@ msgid "" "be removed in a future version. Use 'NavigationServer.map_get_path()' " "instead." msgstr "" +"‚Navigation‘ und ‚Navigation.get_simple_path()‘ sind veraltet und werden in " +"einer zukünftigen Version entfernt. Als Ersatz ist ‚NavigationServer." +"map_get_path()‘ zu verwenden." #: scene/3d/navigation.cpp scene/resources/curve.cpp msgid "Up Vector" @@ -24158,6 +24213,11 @@ msgid "Fold Gutter" msgstr "Einklappenspalte" #: scene/gui/text_edit.cpp +#, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Textauswahl möglich" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "Verstecken aktiviert" @@ -24518,19 +24578,6 @@ msgstr "Ansichtsfensterpfad" #: 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 "" -"Dieser Viewport ist nicht als Render-Ziel eingestellt. Soll sein Inhalt " -"direkt auf dem Bildschirm angezeigt werden, muss er als Unterobjekt eines " -"Controls eingehängt werden um dessen Größe zu erben. Andernfalls sollte die " -"Eigenschaft ‚Render Target‘ des Viewports aktiviert und seine Textur " -"irgendeinem Node zum Anzeigen zugewiesen werden." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -24538,6 +24585,15 @@ msgstr "" "betragen um überhaupt irgendetwas rendern zu können." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "ARVR" @@ -26045,14 +26101,12 @@ msgid "Walkable Low Height Spans" msgstr "Ablaufbare Abstände niedriger Höhe" #: scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Baking AABB" -msgstr "Erzeuge AABB" +msgstr "Backe AABB" #: scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Baking AABB Offset" -msgstr "Grundversatz" +msgstr "Backe AABB-Versatz" #: scene/resources/occluder_shape.cpp msgid "Spheres" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 2682db8c4b..5d2d5f1cbc 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -380,6 +380,10 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5244,6 +5248,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17666,6 +17674,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Custom Build" +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17673,6 +17685,14 @@ msgstr "" msgid "Export Format" msgstr "" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17709,14 +17729,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -17934,12 +17946,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17948,17 +17960,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19460,7 +19492,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20122,6 +20154,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20130,27 +20166,31 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" +msgid "Avoidance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +msgid "Avoidance Enabled" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" +msgid "Time Horizon" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Max Speed" msgstr "" #: scene/2d/navigation_agent_2d.cpp @@ -23074,6 +23114,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23425,16 +23469,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/el.po b/editor/translations/el.po index 21f118d442..a061cc5a59 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -411,6 +411,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (Φυσικό)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5649,6 +5654,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap ΓÎμισμα Επιλογής" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19116,6 +19126,11 @@ msgid "The package must have at least one '.' separator." msgstr "Το πακÎτο Ï€ÏÎπει να Îχει τουλάχιστον Îναν '.' διαχωÏιστή." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Αποκοπή κόμβων" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19124,6 +19139,16 @@ msgstr "" msgid "Export Format" msgstr "ΔιαδÏομή Εξαγωγής" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "ÎœÎγεθος πεÏιγÏάμματος:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Στόχος" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -19166,16 +19191,6 @@ msgstr "ΕπιθεώÏηση του Ï€ÏοηγοÏμενου στιγμιοτÏÏ msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "ÎœÎγεθος πεÏιγÏάμματος:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Στόχος" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19437,7 +19452,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "Το «Hand Tracking» είναι ÎγκυÏο μόνο όταν το «Xr Mode» είναι «Oculus Mobile " @@ -19445,7 +19460,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "Το «Hand Tracking» είναι ÎγκυÏο μόνο όταν το «Xr Mode» είναι «Oculus Mobile " "VR»." @@ -19456,17 +19471,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21143,7 +21178,7 @@ msgstr "ΜεγÎθυνση" msgid "Custom Viewport" msgstr "1 Οπτική γωνία" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21914,6 +21949,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Δεσμός" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Επιλογή απόστασης:" @@ -21922,6 +21962,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Επιλογή απόστασης:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Για Ï€ÏοχωÏημÎνους" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "ΕνεÏγοποίηση" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21939,16 +21994,6 @@ msgstr "ΑναστÏοφή ΟÏιζόντια" msgid "Max Speed" msgstr "ΤαχÏτητα:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Επιλογή απόστασης:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "ΕνεÏγοποίηση" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25376,6 +25421,11 @@ msgstr "Φάκελος:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Μόνο στην επιλογή" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "ΕνεÏγοποίηση" @@ -25781,18 +25831,6 @@ msgid "Viewport Path" 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 "" -"Το Viewport δεν Îχει οÏισθεί ως στόχος απόδοσης. Αν σκοπεÏετε να δείχνει τα " -"πεÏιεχόμενα του, κάντε το να κληÏονομεί Îνα Control, ώστε να αποκτήσει " -"μÎγεθος. Αλλιώς, κάντε το Îνα RenderTarget και οÏίστε το internal texture σε " -"Îναν κόμβο για απεικόνιση." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25802,6 +25840,15 @@ msgstr "" "απόδοση." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/en_Shaw.po b/editor/translations/en_Shaw.po index bf2aa9d387..1f648844a2 100644 --- a/editor/translations/en_Shaw.po +++ b/editor/translations/en_Shaw.po @@ -391,6 +391,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5271,6 +5276,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17739,6 +17748,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17747,6 +17761,14 @@ msgstr "" msgid "Export Format" msgstr "3-ð‘› ð‘‘ð‘®ð‘¨ð‘¯ð‘•ð‘“ð‘¹ð‘¥ ð‘‘ð‘®ð‘¨ð‘’" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17783,14 +17805,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18012,12 +18026,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18026,17 +18040,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19556,7 +19590,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20224,6 +20258,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20232,29 +20270,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23269,6 +23312,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" @@ -23626,16 +23674,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 27aeb13ce0..2eef4fc0d0 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -431,6 +431,11 @@ msgstr "" msgid "Command" msgstr "Komunumo" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fiziko-kadro %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5642,6 +5647,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Enkadrigi elekton" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18811,6 +18821,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Eltondi nodo(j)n" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18819,6 +18834,16 @@ msgstr "" msgid "Export Format" msgstr "Formo" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Grando de konturo:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Celo" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18858,16 +18883,6 @@ msgstr "Inspekti antaÅan ekzemplon" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Grando de konturo:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Celo" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19113,12 +19128,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19127,17 +19142,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20786,7 +20821,7 @@ msgstr "Zomi" msgid "Custom Viewport" msgstr "Montri vidujon" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21513,6 +21548,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Alglui animacion" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Elektu ĉefan scenon" @@ -21521,29 +21561,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Altnivela" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Åœaltita" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Åœaltita" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24822,6 +24867,11 @@ msgstr "Dosierujo:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Nur Elektaro" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Åœaltita" @@ -25224,16 +25274,17 @@ msgstr "Fokusi al dosierindiko" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/es.po b/editor/translations/es.po index 41b1e32779..febff41060 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -466,6 +466,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (FÃsica)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5561,6 +5566,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "Botones Extra del Ratón Navegar por el Historial" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Seleccionar GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Apariencia" @@ -18697,6 +18707,11 @@ msgid "The package must have at least one '.' separator." msgstr "El paquete debe tener al menos un '.' como separador." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "CustomNode" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18705,6 +18720,15 @@ msgstr "" msgid "Export Format" msgstr "Ruta de Exportación" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "SDK MÃnimo" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Objetivo de FPS" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18748,15 +18772,6 @@ msgstr "Inspeccionar Instancia Anterior" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "SDK MÃnimo" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Objetivo de FPS" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19013,15 +19028,17 @@ msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" debe estar activado para usar los plugins." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" solo es válido cuando \"Xr Mode\" es \"Oculus Mobile " "VrApi\" u \"OpenXR\"." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Passthrough\" solo es válido cuando \"Xr Mode\" es \"OpenXR\"." #: platform/android/export/export_plugin.cpp @@ -19030,22 +19047,45 @@ msgstr "" "\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Cambiar el \"Min Sdk\" solo es válido cuando \"Use Custom Build\" está " "activado." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Cambiar el \"Target Sdk\" solo es válido cuando \"Use Custom Build\" está " "activado." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "La versión de \"Target Sdk\" debe ser mayor o igual que la versión de \"Min " "Sdk\"." @@ -20755,7 +20795,7 @@ msgstr "Acercar Zoom" msgid "Custom Viewport" msgstr "1 Viewport" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21521,6 +21561,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Vinculación" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Distancia de la Ruta U" @@ -21529,6 +21574,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "Distancia Máxima de Ruta" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avanzado" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Activar" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21545,15 +21604,6 @@ msgstr "Voltear Horizontalmente" msgid "Max Speed" msgstr "Velocidad Máxima" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "Distancia Máxima de Ruta" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Activar" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -24941,6 +24991,11 @@ msgstr "Plegar Gutter" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Sólo selección" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Activar" @@ -25342,19 +25397,6 @@ msgstr "Ruta de Exportación" #: 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 "" -"Esta ventanilla no está configurada como destino de representación. Si " -"quiere que su contenido se muestre directamente en la pantalla, hágalo un " -"elemento secundario de un control para que pueda recibir dimensiones. O " -"bien, conviértalo en un RenderTarget y asigne su textura interna a algún " -"nodo para que se muestre." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25362,6 +25404,15 @@ msgstr "" "dimensiones para renderizar cualquier cosa." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index aa0a7c6258..eeea3a9922 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -413,6 +413,11 @@ msgstr "Meta" msgid "Command" msgstr "Comunidad" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (FÃsica)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5630,6 +5635,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Selección de GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18901,6 +18911,11 @@ msgid "The package must have at least one '.' separator." msgstr "El paquete debe tener al menos un '.' como separador." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "CustomNode" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18909,6 +18924,16 @@ msgstr "" msgid "Export Format" msgstr "Ruta de Exportación" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Tamaño de Outline:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Objetivo" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18952,16 +18977,6 @@ msgstr "Inspeccionar Instancia Previa" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Tamaño de Outline:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Objetivo" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19213,15 +19228,17 @@ msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" debe estar activado para usar los plugins." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile " "VrApi\" o \"OpenXR\"." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Passthrough\" sólo es válido cuando \"Xr Mode\" es \"OpenXR\"." #: platform/android/export/export_plugin.cpp @@ -19230,22 +19247,45 @@ msgstr "" "\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Cambiar el \"Min Sdk\" sólo es válido cuando \"Use Custom Build\" está " "activado." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Cambiar el \"Target Sdk\" sólo es válido cuando \"Use Custom Build\" está " "activado." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "La versión de \"Target Sdk\" debe ser mayor o igual a la versión de \"Min " "Sdk\"." @@ -20984,7 +21024,7 @@ msgstr "Zoom In" msgid "Custom Viewport" msgstr "1 Viewport" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21762,6 +21802,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Binding" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Elegir Instancia:" @@ -21770,6 +21815,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Elegir Instancia:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avanzado" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Activar" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21786,16 +21846,6 @@ msgstr "Espejar Horizontalmente" msgid "Max Speed" msgstr "Velocidad Máxima" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Elegir Instancia:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Activar" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25190,6 +25240,11 @@ msgstr "Carpeta:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Solo Selección" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Activar" @@ -25602,18 +25657,6 @@ msgstr "Ruta de Exportación" #: 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 "" -"Este viewport no está seteado como render target. Si tienes intención de que " -"muestre contenidos directo a la pantalla, haz un hijo de un Control para que " -"pueda obtener un tamaño. Alternativamente, haz un RenderTarget y asigna su " -"textura interna a algún otro nodo para mostrar." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25621,6 +25664,15 @@ msgstr "" "dimensiones para renderizar cualquier cosa." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/et.po b/editor/translations/et.po index f90543b559..b7ed666bb0 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -417,6 +417,11 @@ msgstr "" msgid "Command" msgstr "Kogukond" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Luba" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5473,6 +5478,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Kopeeri valik" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18297,6 +18307,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Kustuta sõlm(ed)" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18305,6 +18320,16 @@ msgstr "" msgid "Export Format" msgstr "Formaat" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Suurus: " + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Ressursi tee" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18343,16 +18368,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Suurus: " - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Ressursi tee" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18591,12 +18606,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18605,17 +18620,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20238,7 +20273,7 @@ msgstr "" msgid "Custom Viewport" msgstr "1 vaateaken" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -20951,6 +20986,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Kombinatsioon" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Paigalda" @@ -20959,29 +20999,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Täpsem" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Luba" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Luba" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24170,6 +24215,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Vali see kaust" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Luba" @@ -24556,14 +24606,6 @@ msgid "Viewport Path" msgstr "1 vaateaken" #: 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 #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -24571,6 +24613,15 @@ msgid "" msgstr "Vaateakne suurus peab olema suurem kui 0, et kuvada." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/eu.po b/editor/translations/eu.po index 9ffd16f336..ff9601ad57 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -394,6 +394,11 @@ msgstr "" msgid "Command" msgstr "Komunitatea" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Gaitu atxikitzea" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5380,6 +5385,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18122,6 +18131,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Kendu elementu guztiak" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18130,6 +18144,15 @@ msgstr "" msgid "Export Format" msgstr "Esportatu" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Blend4 nodoa" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18167,15 +18190,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Blend4 nodoa" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18413,12 +18427,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18427,17 +18441,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20032,7 +20066,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -20729,6 +20763,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Itsatsi animazioa" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Instalatu" @@ -20737,29 +20776,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Gaitu atxikitzea" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Gaitu atxikitzea" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Gaitu atxikitzea" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23887,6 +23931,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Hautatu karpeta hau" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Gaitu atxikitzea" @@ -24266,16 +24315,17 @@ msgstr "Kopiatu bidea" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 0b7bd8cdb1..ae8a37388a 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -441,6 +441,11 @@ msgstr "" msgid "Command" msgstr "جامعه" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "روشن" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5535,6 +5540,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "انتخاب شده را ØØ°Ù Ú©Ù†" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19006,6 +19016,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ساختن گره" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19014,6 +19029,16 @@ msgstr "" msgid "Export Format" msgstr "صدور پروژه" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "باز کردن Ùˆ اجرای یک اسکریپت" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "گره تغییر والد" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19052,16 +19077,6 @@ msgstr "زبانه قبلی" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "باز کردن Ùˆ اجرای یک اسکریپت" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "گره تغییر والد" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19306,12 +19321,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19320,17 +19335,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20980,7 +21015,7 @@ msgstr "بزرگنمایی" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21714,6 +21749,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ثابت" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "نصب کردن" @@ -21722,29 +21762,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "پیشرÙته" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "روشن" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "روشن" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -25012,6 +25057,11 @@ msgstr "ساختن پوشه" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "تنها در قسمت انتخاب شده" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "روشن" @@ -25408,20 +25458,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"این viewport به صورت render target تنظیم نیست. اگر قصد دارید Ú©Ù‡ Ù…Øتویاتش را " -"به صورت مستقیم در صÙØه‌نمایش نمایش دهد، آن را یک Ùرزند یک Control قرار دهید " -"تا بتواند یک اندازه بگیرد. در غیر اینصورت، آن را یک RenderTarget قرار دهید Ùˆ " -"باÙت داخلی آن را برای نمایش به تعدادی گره تخصیص دهید." #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 24d8fd66ab..7613bdfcce 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -437,6 +437,11 @@ msgstr "" msgid "Command" msgstr "Yhteisö" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (fyysinen)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5662,6 +5667,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Ruudukon valinta" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18902,6 +18912,11 @@ msgid "The package must have at least one '.' separator." msgstr "Paketilla on oltava ainakin yksi '.' erotinmerkki." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Mukautettu solmu" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18910,6 +18925,16 @@ msgstr "" msgid "Export Format" msgstr "Vientipolku" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Ääriviivojen koko:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Kohde" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18953,16 +18978,6 @@ msgstr "Tarkastele edellistä ilmentymää" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Ääriviivojen koko:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Kohde" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19216,15 +19231,17 @@ msgstr "" "käyttää." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetuksen " "arvo on \"Oculus Mobile VrAPI\" tai \"OpenXR\"." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Passthrough\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetuksen arvo " "on \"OpenXR\"." @@ -19236,22 +19253,45 @@ msgstr "" "päällä." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Min Sdk\" vaihtaminen on mahdollista vain, kun \"Use Custom Build\" asetus " "on päällä." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Target Sdk\" vaihtaminen on mahdollista vain, kun \"Use Custom Build\" " "asetus on päällä." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "\"Target Sdk\" versionumeron on oltava suurempi tai yhtä suuri kuin \"Min " "Sdk\" versionumeron." @@ -20991,7 +21031,7 @@ msgstr "Lähennä" msgid "Custom Viewport" msgstr "1 näyttöruutu" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21766,6 +21806,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Sidonta" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Poimintaetäisyys:" @@ -21774,6 +21819,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Poimintaetäisyys:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Edistyneet" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Ota käyttöön" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21791,16 +21851,6 @@ msgstr "Käännä vaakasuorasti" msgid "Max Speed" msgstr "Nopeus:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Poimintaetäisyys:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Ota käyttöön" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -25260,6 +25310,11 @@ msgstr "Kansio:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Pelkkä valinta" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Ota käyttöön" @@ -25672,18 +25727,6 @@ msgstr "Vientipolku" #: 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 "" -"Tätä näyttöikkunaa ei ole asetettu renderöitäväksi. Jos haluat sen näyttävän " -"sisältöä suoraan näytölle, tee sitä Control solmun alisolmu, jotta se voi " -"saada koon. Muutoin tee siitä RenderTarget ja aseta sen sisäinen tekstuuri " -"johonkin solmuun näkyväksi." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25691,6 +25734,15 @@ msgstr "" "kummassakin suunnassa, jotta mitään renderöidään." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index 822a23a9b9..24a5742ef6 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -392,6 +392,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Pisika" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5297,6 +5302,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17868,6 +17877,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Ilipat Ang Mga Bezier Points" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17876,6 +17890,14 @@ msgstr "" msgid "Export Format" msgstr "3D Transform Track" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17912,14 +17934,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18143,12 +18157,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18157,17 +18171,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19706,7 +19740,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20383,6 +20417,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20391,29 +20429,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Binuksan ang V-Sync" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Binuksan ang V-Sync" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Binuksan ang V-Sync" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23426,6 +23469,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23786,16 +23833,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 5711d32f52..8822d35687 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -32,7 +32,7 @@ # Przemyslaw Gasinski <gasinski.przemek@protonmail.ch>, 2017. # rafeu <duchainer@gmail.com>, 2016-2017. # rawida <rawida@tempinbox.com>, 2018. -# Rémi Verschelde <rverschelde@gmail.com>, 2016-2017. +# Rémi Verschelde <akien@godotengine.org>, 2016-2022. # Robin Arys <robinarys@hotmail.com>, 2017. # Roger BR <drai_kin@hotmail.com>, 2016. # salty64 <cedric.arrabie@univ-pau.fr>, 2018, 2020, 2021. @@ -49,7 +49,6 @@ # Brice Lobet <tempo.data@gmail.com>, 2018. # Florent Wijanto <f_wijanto@hotmail.com>, 2018. # Olivier gareau <olivier.gareau@protonmail.com>, 2018. -# Rémi Verschelde <akien@godotengine.org>, 2018, 2019, 2020, 2021. # Rémi Bintein <reminus5@hotmail.fr>, 2018, 2019. # Sylvain Corsini <sylvain.corsini@gmail.com>, 2018. # Caye Pierre <pierrecaye@laposte.net>, 2019. @@ -66,7 +65,7 @@ # Fabrice <fabricecipolla@gmail.com>, 2019. # Romain Paquet <titou.paquet@gmail.com>, 2019. # Xavier Sellier <contact@binogure-studio.com>, 2019. -# Sofiane <Sofiane-77@caramail.fr>, 2019, 2021. +# Sofiane <Sofiane-77@caramail.fr>, 2019, 2021, 2022. # Camille Mohr-Daurat <pouleyketchoup@gmail.com>, 2019. # Pierre Stempin <pierre.stempin@gmail.com>, 2019. # Pierre Caye <pierrecaye@laposte.net>, 2020, 2021, 2022. @@ -99,13 +98,14 @@ # Nathan Hamy <hamynathan92@gmail.com>, 2022. # HOUA <ninjacowzx@gmail.com>, 2022. # DinosaurHorseSword <ewenlandry@mailfence.com>, 2022. +# Arnaud Lier <arnaud@ric-rac.org>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-29 10:04+0000\n" -"Last-Translator: DinosaurHorseSword <ewenlandry@mailfence.com>\n" +"PO-Revision-Date: 2022-07-03 00:44+0000\n" +"Last-Translator: Sofiane <Sofiane-77@caramail.fr>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -375,7 +375,7 @@ msgstr "" #: core/io/stream_peer.cpp msgid "Big Endian" -msgstr "" +msgstr "Gros-boutiste" #: core/io/stream_peer.cpp msgid "Data Array" @@ -483,6 +483,11 @@ msgstr "Méta" msgid "Command" msgstr "Commande" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (physique)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -927,7 +932,7 @@ msgstr "" #: core/register_core_types.cpp msgid "TCP" -msgstr "PCT (Protocole de Contrôle de Transmissions)" +msgstr "TCP" #: core/register_core_types.cpp msgid "Connect Timeout Seconds" @@ -5667,6 +5672,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Sélection de la GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18914,6 +18924,11 @@ msgid "The package must have at least one '.' separator." msgstr "Le paquet doit comporter au moins un séparateur « . »." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "NÅ“ud Personnalisé" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18922,6 +18937,14 @@ msgstr "" msgid "Export Format" msgstr "Chemin d'exportation" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "Min SDK" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "Target SDK" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18965,15 +18988,6 @@ msgstr "Inspecter l'instance précédente" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "SDK Minimal" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Cible" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19012,14 +19026,12 @@ msgid "OpenGL Debug" msgstr "Ouvrir" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "XR Features" -msgstr "Fonctionnalités" +msgstr "Fonctionnalités XR" #: platform/android/export/export_plugin.cpp -#, fuzzy msgid "XR Mode" -msgstr "Mode navigation" +msgstr "Mode XR" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19226,17 +19238,16 @@ msgstr "« Use Custom Build » doit être activé pour utiliser les plugins." #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" -"« Hand Tracking » est valide uniquement lorsque le « Mode Xr » est « Oculus " +"« Hand Tracking » est valide uniquement lorsque le « Mode XR » est « Oculus " "Mobile VrApi »." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" -"« Passthrough » est valide uniquement lorsque le « Xr Mode » est « Oculus " -"Mobile VrApi »." +"« Passthrough » est valide uniquement lorsque le « Mode XR » est « OpenXR »." #: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." @@ -19246,24 +19257,44 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" -"Changer « Min Sdk » est valide uniquement lorsque l'option « Use Custom " +"Changer « Min SDK » est valide uniquement lorsque l'option « Use Custom " "Build » est activée." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" -"Changer « Target Sdk » est valide uniquement lorsque l'option « Use Custom " + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" +"Changer « Target SDK » est valide uniquement lorsque l'option « Use Custom " "Build » est activée." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" -"La version « Target Sdk » doit être supérieure ou égale à la version « Min " -"Sdk »." +"La version « Target SDK » doit être supérieure ou égale à la version « Min " +"SDK »." #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp @@ -20976,7 +21007,7 @@ msgstr "Zoomer" msgid "Custom Viewport" msgstr "1 vue" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21747,6 +21778,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Liaison" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Choisissez distance :" @@ -21755,6 +21791,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Choisissez distance :" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Options avancées" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Activer" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21772,16 +21823,6 @@ msgstr "Retourner horizontalement" msgid "Max Speed" msgstr "Vitesse :" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Choisissez distance :" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Activer" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -22876,7 +22917,7 @@ msgstr "Aimanter au pixel" #: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp msgid "Billboard" -msgstr "" +msgstr "Billboard" #: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp #, fuzzy @@ -25226,6 +25267,11 @@ msgstr "Dossier :" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Sélection uniquement" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Activer" @@ -25627,18 +25673,6 @@ msgstr "Chemin d'exportation" #: 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 "" -"Ce Viewport n'est pas sélectionné comme cible de rendu. Si vous avez " -"l'intention d'afficher son contenu directement à l'écran, rattachez-le à un " -"nÅ“ud de type Control afin qu'il en obtienne une taille. Sinon, faites-en une " -"RenderTarget et assignez sa texture à un nÅ“ud pouvant l'afficher." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25646,6 +25680,15 @@ msgstr "" "dans les deux sens pour que le rendu soit possible." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" @@ -27098,14 +27141,12 @@ msgid "Point Size" msgstr "Vue de devant" #: scene/resources/material.cpp -#, fuzzy msgid "Billboard Mode" -msgstr "Mode Règle" +msgstr "Mode billboard" #: scene/resources/material.cpp -#, fuzzy msgid "Billboard Keep Scale" -msgstr "Mode Règle" +msgstr "Garder l'échelle du billboard" #: scene/resources/material.cpp msgid "Grow" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 04e014ed77..65ffebf3e5 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -393,6 +393,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "ScagairÃ..." + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5291,6 +5296,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17820,6 +17829,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Cruthaigh" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17827,6 +17841,15 @@ msgstr "" msgid "Export Format" msgstr "" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Nód Cumaisc2" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17863,15 +17886,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Nód Cumaisc2" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18093,12 +18107,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18107,17 +18121,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19656,7 +19690,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20339,6 +20373,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20347,29 +20385,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "ScagairÃ..." #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "ScagairÃ..." + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "ScagairÃ..." +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23391,6 +23434,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "ScagairÃ..." + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "ScagairÃ..." @@ -23752,16 +23800,17 @@ msgstr "Cosán" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/gl.po b/editor/translations/gl.po index 27b15829fa..c8dd75ade3 100644 --- a/editor/translations/gl.po +++ b/editor/translations/gl.po @@ -425,6 +425,11 @@ msgstr "" msgid "Command" msgstr "Comunidade" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fotograma de FÃsica %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5642,6 +5647,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Encadrar Selección" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18796,6 +18806,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Cortar Nodos" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18804,6 +18819,16 @@ msgstr "" msgid "Export Format" msgstr "Formato" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Tamaño: " + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Obxectivo" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18843,16 +18868,6 @@ msgstr "Anterior Pestana" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Tamaño: " - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Obxectivo" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19102,12 +19117,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19116,17 +19131,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20782,7 +20817,7 @@ msgstr "Aumentar Zoom" msgid "Custom Viewport" msgstr "1 Ventá" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21524,6 +21559,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Pegar Animación" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Elexir unha Escena Principal" @@ -21532,6 +21572,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avanzado" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Activar" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21549,15 +21603,6 @@ msgstr "Horizontal:" msgid "Max Speed" msgstr "Velocidade:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Activar" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -24887,6 +24932,11 @@ msgstr "Cartafol:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Só a Selección" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Activar" @@ -25283,18 +25333,6 @@ msgid "Viewport Path" msgstr "1 Ventá" #: 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 "" -"Esta Mini-Ventá (Viewport) no está configurada como obxectivo de " -"renderizado. Se quere que o seu contido se mostre directamente na pantalla, " -"convértao nun nodo fillo dun nodo Control para que poida recibir dimensións. " -"Ou ben, fágao un RenderTarget e asigne a súa textura a algún nodo." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25304,6 +25342,15 @@ msgstr "" "renderizar nada." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/he.po b/editor/translations/he.po index 22cf33ba52..d37f806bb7 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -423,6 +423,11 @@ msgstr "" msgid "Command" msgstr "פיקוד" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "פיזיקה" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5557,6 +5562,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap מילוי הבחירה" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18932,6 +18942,11 @@ msgid "The package must have at least one '.' separator." msgstr "החבילה חייבת לכלול לפחות מפריד '.' ×חד." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "גזירת מפרקי×" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18940,6 +18955,16 @@ msgstr "" msgid "Export Format" msgstr "×™×™×¦×•× ×ž×™×–×" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "מבט קדמי" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "× ×ª×™×‘ המש×ב" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18980,16 +19005,6 @@ msgstr "בדיקת המופע הקוד×" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "מבט קדמי" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "× ×ª×™×‘ המש×ב" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19244,13 +19259,13 @@ msgstr "חובה ל×פשר ״שימוש ×‘×‘× ×™×” מות×מת ×ישית״ ×› #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "\"Hand Tracking\" תקף רק ×›×שר \"מצב Xr\" ×”×•× \"Oculus Mobile VR\"." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Hand Tracking\" תקף רק ×›×שר \"מצב Xr\" ×”×•× \"Oculus Mobile VR\"." #: platform/android/export/export_plugin.cpp @@ -19259,17 +19274,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20942,7 +20977,7 @@ msgstr "התקרבות" msgid "Custom Viewport" msgstr "מבט תחתי" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21685,6 +21720,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "קישור" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "בחירת מרחק:" @@ -21693,6 +21733,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "בחירת מרחק:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "מתקד×" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "הפעלה" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21709,16 +21764,6 @@ msgstr "" msgid "Max Speed" msgstr "מהירות (FPS):" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "בחירת מרחק:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "הפעלה" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25074,6 +25119,11 @@ msgstr "יצירת תיקייה" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "בחירה בלבד" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "הפעלה" @@ -25476,17 +25526,6 @@ msgid "Viewport Path" 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 "" -"חלון תצוגה ×–×” ××™× ×• מוגדר כיעד עיבוד. להצגת התוכן ישירות למסך, יש להפוך ×ותו " -"לצ××¦× ×©×œ בקר כדי שיקבל גודל. ×ו להפוך ×ותו ל-RenderTarget ולשייך ×ת ×”×ž×¨×§× " -"×”×¤× ×™×ž×™ שלו למפרק כלשהו לתצוגה." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25494,6 +25533,15 @@ msgid "" msgstr "גודל חלון התצוגה חייב להיות גדול מ-0 על ×ž× ×ª להציג משהו." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index a14fd36f4a..0e6bb551e4 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -406,6 +406,11 @@ msgstr "" msgid "Command" msgstr "समà¥à¤¦à¤¾à¤¯" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "फिजिकà¥à¤¸ फà¥à¤°à¥‡à¤® %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5562,6 +5567,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "सà¤à¥€ खंड" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18576,6 +18586,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18584,6 +18599,16 @@ msgstr "" msgid "Export Format" msgstr "à¤à¤¨à¥€à¤®à¥‡à¤¶à¤¨ परिवरà¥à¤¤à¤¨ परिणत" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "आकार: " + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "नोड हटाà¤à¤‚" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18622,16 +18647,6 @@ msgstr "पिछला टैब" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "आकार: " - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "नोड हटाà¤à¤‚" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18872,12 +18887,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18886,17 +18901,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20534,7 +20569,7 @@ msgstr "बड़ा करो" msgid "Custom Viewport" msgstr "वà¥à¤¯à¥‚पोरà¥à¤Ÿ चà¥à¤¨à¥‡à¤‚" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21247,6 +21282,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "कोनà¥à¤¸à¥à¤Ÿà¤¨à¥à¤Ÿ" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "à¤à¤• मà¥à¤–à¥à¤¯ दृशà¥à¤¯ चà¥à¤¨à¥‡à¤‚" @@ -21255,29 +21295,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "अगà¥à¤°à¤µà¤°à¥à¤¤à¥€" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "सकà¥à¤°à¤¿à¤¯ करे" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "सकà¥à¤°à¤¿à¤¯ करे" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24471,6 +24516,11 @@ msgstr "फ़ोलà¥à¤¡à¤°:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "सिरà¥à¤« चयन किये हà¥à¤" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "सकà¥à¤°à¤¿à¤¯ करे" @@ -24865,16 +24915,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/hr.po b/editor/translations/hr.po index 9a3dabefb3..c1a9a444cc 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -408,6 +408,11 @@ msgstr "" msgid "Command" msgstr "Zajednica" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Omogući" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5381,6 +5386,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "IzbriÅ¡i Odabir" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18135,6 +18145,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Pomakni Bezier ToÄke" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18143,6 +18158,16 @@ msgstr "" msgid "Export Format" msgstr "Izvoz" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Glavna skripta:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Premjesti Ävor(node)" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18179,16 +18204,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Glavna skripta:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Premjesti Ävor(node)" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18419,12 +18434,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18433,17 +18448,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20025,7 +20060,7 @@ msgstr "Zumiraj" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20728,6 +20763,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Zalijepi Animaciju" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Instaliraj" @@ -20736,29 +20776,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Napredno" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Omogući" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Omogući" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23883,6 +23928,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Samo odabir" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Omogući" @@ -24260,16 +24310,17 @@ msgstr "Put" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 62f30698a3..5bfd5b0995 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -445,6 +445,11 @@ msgstr "" msgid "Command" msgstr "Közösség" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fizika Keret %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5670,6 +5675,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Kijelölés Keretezése" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18763,6 +18773,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Node-ok kivágása" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18771,6 +18786,16 @@ msgstr "" msgid "Export Format" msgstr "Exportálási Útvonal" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Körvonal Mérete:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Cél Felület:" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18810,16 +18835,6 @@ msgstr "ElÅ‘zÅ‘ lap" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Körvonal Mérete:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Cél Felület:" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19065,12 +19080,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19079,17 +19094,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20740,7 +20775,7 @@ msgstr "NagyÃtás" msgid "Custom Viewport" msgstr "Nézet MegjelenÃtése" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21476,6 +21511,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Véletlenszerű Forgatás:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Válasszon egy FÅ‘ Jelenetet" @@ -21484,29 +21524,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Speciális" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Engedélyezés" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Engedélyezés" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24797,6 +24842,11 @@ msgstr "Mappa:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Csak kijelölés" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Engedélyezés" @@ -25199,20 +25249,17 @@ msgstr "Exportálási Útvonal" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"Ez a nézetablak nincs beállÃtva leképezési célnak. Ha azt szeretné, hogy a " -"tartalma közvetlenül a képernyÅ‘n jelenjen meg, tegye azt egy Control " -"gyermekévé, hogy Ãgy kapjon méretet. EllenkezÅ‘ esetben tegye RenderTarget-" -"té, és állÃtsa hozzá a belsÅ‘ textúráját valamilyen node-hoz kirajzolásra." #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/id.po b/editor/translations/id.po index 4d71521032..57c1a69e92 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -425,6 +425,11 @@ msgstr "Meta" msgid "Command" msgstr "Perintah" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (Secara fisik)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5601,6 +5606,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "Tombol Ekstra Mouse Navigasi Riwayat" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Isi Seleksi GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Penampilan" @@ -18874,6 +18884,11 @@ msgstr "Package setidaknya harus memiliki sebuah pemisah '.'." #: platform/android/export/export_plugin.cpp #, fuzzy +msgid "Custom Build" +msgstr "Gunakan Direktori Pengguna Kustom" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "Use Custom Build" msgstr "Gunakan Direktori Pengguna Kustom" @@ -18882,6 +18897,16 @@ msgstr "Gunakan Direktori Pengguna Kustom" msgid "Export Format" msgstr "Lokasi Ekspor" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Ukuran Garis Tepi:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "FPS Sasaran" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18924,16 +18949,6 @@ msgstr "Inspeksi Instance Sebelumnya" msgid "Code" msgstr "Kode" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Ukuran Garis Tepi:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "FPS Sasaran" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19174,7 +19189,7 @@ msgstr "\"Gunakan Build Custom\" harus diaktifkan untuk menggunakan plugin." #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Pelacakan Tangan\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus Mobile " @@ -19182,7 +19197,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Pelacakan Tangan\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus Mobile " "VR\"." @@ -19195,20 +19210,41 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Expor AAB\" hanya bisa valid ketika \"Gunakan Build Custom\" diaktifkan." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Expor AAB\" hanya bisa valid ketika \"Gunakan Build Custom\" diaktifkan." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "Versi \"Target SDK\" harus lebih tinggi atau sama dengan versi \"Min SDK\"." @@ -20881,7 +20917,7 @@ msgstr "Perbesar Pandangan" msgid "Custom Viewport" msgstr "Penampil Kustom" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21627,6 +21663,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Mengikat" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Target Jarak yang Diinginkan" @@ -21635,6 +21676,21 @@ msgid "Target Desired Distance" msgstr "Target Jarak yang Diinginkan" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Pilih Jarak:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Lanjut" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktifkan" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21651,16 +21707,6 @@ msgstr "Balik secara Horizontal" msgid "Max Speed" msgstr "Kecepatan Maks" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Pilih Jarak:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktifkan" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -25037,6 +25083,11 @@ msgstr "Direktori:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Hanya yang Dipilih" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktifkan" @@ -25443,19 +25494,6 @@ msgid "Viewport Path" msgstr "Lokasi Ekspor" #: 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 "" -"Viewport ini tidak diatur sebagai target render. Jika anda berniat untuk " -"menampilkan konten-kontennya secara langsung ke layar, jadikan viewport ini " -"sebagai child dari sebuah Control agar ia bisa memperoleh ukuran. Jika " -"tidak, jadikan sebagai RenderTarget dan tetapkan tekstur internal nya ke " -"beberapa node untuk ditampilkan." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25463,6 +25501,15 @@ msgid "" msgstr "Ukuran viewport harus lebih besar dari 0 untuk me-render apa pun." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/is.po b/editor/translations/is.po index 105220c71e..d5353421d4 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -401,6 +401,10 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5368,6 +5372,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Allt úrvalið" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18081,6 +18090,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "TvÃteknir lyklar" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18089,6 +18103,15 @@ msgstr "" msgid "Export Format" msgstr "Breyta umbreytingu" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Anim DELETE-lyklar" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18125,15 +18148,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Anim DELETE-lyklar" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18361,12 +18375,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18375,17 +18389,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19932,7 +19966,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20625,6 +20659,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20633,29 +20671,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Fjarlægja val" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Fjarlægja val" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Fjarlægja val" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23706,6 +23749,11 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +#, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Afrita val" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -24077,16 +24125,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/it.po b/editor/translations/it.po index 074bb4259d..e693139e21 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -68,13 +68,14 @@ # Alfonso Scarpino <alfonso.scarpino@gmail.com>, 2022. # Federico Caprini <caprinifede@gmail.com>, 2022. # Alessandro Casalino <alessandro.casalino93@gmail.com>, 2022. +# conecat <ilgrandemax190@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-26 16:16+0000\n" -"Last-Translator: Mirko <miknsop@gmail.com>\n" +"PO-Revision-Date: 2022-07-04 05:16+0000\n" +"Last-Translator: conecat <ilgrandemax190@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -419,14 +420,12 @@ msgid "Max Size (KB)" msgstr "Dimensione Massima (KB)" #: core/os/input.cpp -#, fuzzy msgid "Mouse Mode" -msgstr "Modalità spostamento" +msgstr "Modalità Mouse" #: core/os/input.cpp -#, fuzzy msgid "Use Accumulated Input" -msgstr "Elimina Input" +msgstr "Usa Input Accumulato" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp @@ -453,6 +452,11 @@ msgstr "Meta" msgid "Command" msgstr "Comando" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (Fisico)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -1237,9 +1241,8 @@ msgid "Animation" msgstr "Animazione" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing" -msgstr "Easing" +msgstr "Allentamento" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Time" @@ -1353,14 +1356,12 @@ msgid "Time (s):" msgstr "Tempo (s):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "Posizione" +msgstr "Posizione:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "Rotazione" +msgstr "Rotazione:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1382,9 +1383,8 @@ msgid "(Invalid, expected type: %s)" msgstr "Template di esportazione non valido:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing:" -msgstr "Easing" +msgstr "Allentamento:" #: editor/animation_track_editor.cpp #, fuzzy @@ -5573,6 +5573,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "Uso dei tasti aggiuntivi del mouse per navigare la cronologia" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Selezione GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Aspetto" @@ -16241,8 +16246,9 @@ msgid "Flush stdout On Print" msgstr "Svuota stdout Alla Stampa" #: main/main.cpp servers/visual_server.cpp +#, fuzzy msgid "Logging" -msgstr "" +msgstr "Logging" #: main/main.cpp msgid "File Logging" @@ -18562,6 +18568,11 @@ msgid "The package must have at least one '.' separator." msgstr "Il pacchetto deve avere almeno un \".\" separatore." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Utilizza Build Personalizzata" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "Utilizza Build Personalizzata" @@ -18569,6 +18580,14 @@ msgstr "Utilizza Build Personalizzata" msgid "Export Format" msgstr "Formato Esportazione" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "SDK Min" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "Target SDK" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18607,14 +18626,6 @@ msgstr "Elimina Installazione Precedente" msgid "Code" msgstr "Codice" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "SDK Min" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "Target SDK" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "Pacchetto" @@ -18856,7 +18867,7 @@ msgstr "Per utilizzare i plugin \"Use Custom Build\" deve essere abilitato." #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" è valido solo quando \"Xr Mode\" è impostato su \"Oculus " @@ -18864,7 +18875,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Hand Tracking\" è valido solo quando \"Xr Mode\" è impostato su \"Oculus " "Mobile VR\"." @@ -18877,20 +18888,40 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20584,7 +20615,7 @@ msgstr "Ingrandisci" msgid "Custom Viewport" msgstr "1 Vista" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -20641,13 +20672,14 @@ msgid "Smoothing" msgstr "Graduale" #: scene/2d/camera_2d.cpp +#, fuzzy msgid "H" -msgstr "" +msgstr "H" #: scene/2d/camera_2d.cpp #, fuzzy msgid "V" -msgstr "UV" +msgstr "V" #: scene/2d/camera_2d.cpp #, fuzzy @@ -20958,7 +20990,7 @@ msgstr "Propagazione" #: scene/resources/particles_material.cpp #, fuzzy msgid "Initial Velocity" -msgstr "Inizializza" +msgstr "Velocità iniziale" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -20969,8 +21001,9 @@ msgstr "Velocità " #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp servers/physics_2d_server.cpp #: servers/physics_server.cpp +#, fuzzy msgid "Angular Velocity" -msgstr "" +msgstr "Velocità angolare" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -20982,13 +21015,13 @@ msgstr "Velocità " #: scene/resources/particles_material.cpp #, fuzzy msgid "Orbit Velocity" -msgstr "Orbita la visuale a destra" +msgstr "Velocità orbitale" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp #, fuzzy msgid "Linear Accel" -msgstr "Lineare" +msgstr "Accelerazione lineare" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -21009,13 +21042,15 @@ msgstr "Dividi Curva" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp +#, fuzzy msgid "Radial Accel" -msgstr "" +msgstr "Accelerazione radiale" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp +#, fuzzy msgid "Tangential Accel" -msgstr "" +msgstr "Accelerazione tangenziale" #: scene/2d/cpu_particles_2d.cpp scene/2d/joints_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/physics_body.cpp @@ -21368,6 +21403,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Associazione" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Scegli la Distanza:" @@ -21376,6 +21416,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Scegli la Distanza:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Opzioni avanzate" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Abilita" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21393,16 +21448,6 @@ msgstr "Ribalta orizzontalmente" msgid "Max Speed" msgstr "Velocità :" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Scegli la Distanza:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Abilita" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -21866,12 +21911,14 @@ msgstr "" "Skeleton2D e impostane una." #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp +#, fuzzy msgid "Hframes" -msgstr "" +msgstr "Hframes" #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp +#, fuzzy msgid "Vframes" -msgstr "" +msgstr "Vframes" #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp #, fuzzy @@ -22129,8 +22176,9 @@ msgstr "Impacchettando" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp #: scene/3d/reflection_probe.cpp +#, fuzzy msgid "Interior" -msgstr "" +msgstr "Interno" #: scene/3d/baked_lightmap.cpp msgid "Finding meshes and lights" @@ -22270,8 +22318,9 @@ msgid "Projection" msgstr "Proiezione" #: scene/3d/camera.cpp +#, fuzzy msgid "FOV" -msgstr "" +msgstr "FOV" #: scene/3d/camera.cpp #, fuzzy @@ -22284,8 +22333,9 @@ msgid "Near" msgstr "Vicino" #: scene/3d/camera.cpp +#, fuzzy msgid "Far" -msgstr "" +msgstr "Lontano" #: scene/3d/camera.cpp scene/3d/collision_polygon.cpp scene/3d/spring_arm.cpp #: scene/gui/control.cpp scene/resources/default_theme/default_theme.cpp @@ -22470,8 +22520,9 @@ msgstr "" "Per rimuovere questo avviso, disattiva la proprietà Compress di GIProbe." #: scene/3d/gi_probe.cpp +#, fuzzy msgid "Subdiv" -msgstr "" +msgstr "Subdiv" #: scene/3d/gi_probe.cpp #, fuzzy @@ -22622,8 +22673,9 @@ msgid "Depth Range" msgstr "Profondità " #: scene/3d/light.cpp +#, fuzzy msgid "Omni" -msgstr "" +msgstr "Omni" #: scene/3d/light.cpp #, fuzzy @@ -23363,8 +23415,9 @@ msgid "There should only be one RoomManager in the SceneTree." msgstr "Ci dovrebbe essere un solo RoomManager nello SceneTree." #: scene/3d/room_manager.cpp +#, fuzzy msgid "Main" -msgstr "" +msgstr "Principale" #: scene/3d/room_manager.cpp scene/animation/animation_blend_tree.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp @@ -23607,8 +23660,9 @@ msgid "Spring Length" msgstr "" #: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp +#, fuzzy msgid "Opacity" -msgstr "" +msgstr "Opacità " #: scene/3d/sprite_3d.cpp scene/resources/material.cpp #, fuzzy @@ -23729,8 +23783,9 @@ msgid "Lightmap Scale" msgstr "" #: scene/3d/visual_instance.cpp +#, fuzzy msgid "LOD" -msgstr "" +msgstr "LOD" #: scene/3d/visual_instance.cpp scene/animation/skeleton_ik.cpp #: scene/resources/material.cpp @@ -24041,8 +24096,9 @@ msgid "Stretch Mode" msgstr "Modalità di Selezione" #: scene/gui/aspect_ratio_container.cpp scene/gui/box_container.cpp +#, fuzzy msgid "Alignment" -msgstr "" +msgstr "Allineamento" #: scene/gui/base_button.cpp #, fuzzy @@ -24827,6 +24883,11 @@ msgstr "Cartella:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Solo nella selezione" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Abilita" @@ -25234,19 +25295,6 @@ msgstr "Percorso di Esportazione" #: 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 "" -"Questo viewport non è impostato come target di render. Se si vuole che il " -"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 -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25254,6 +25302,15 @@ msgstr "" "entrambi i lati per visualizzare qualcosa." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index a699aeb597..3abcd5529f 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -430,6 +430,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (物ç†çš„)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5567,6 +5572,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap ã®é¸æŠž" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "外観" @@ -18661,6 +18671,11 @@ msgid "The package must have at least one '.' separator." msgstr "パッケージã«ã¯ä¸€ã¤ä»¥ä¸Šã®åŒºåˆ‡ã‚Šæ–‡å— '.' ãŒå¿…è¦ã§ã™ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ノードを切りå–ã‚‹" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18669,6 +18684,15 @@ msgstr "" msgid "Export Format" msgstr "エクスãƒãƒ¼ãƒˆå…ˆã®ãƒ‘ス" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "アウトラインã®ã‚µã‚¤ã‚º:" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "ターゲットSDK" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18712,15 +18736,6 @@ msgstr "å‰ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’調ã¹ã‚‹" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "アウトラインã®ã‚µã‚¤ã‚º:" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "ターゲットSDK" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18968,15 +18983,17 @@ msgstr "" "ã«ãªã£ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" 㯠\"Xr Mode\" ㌠\"Oculus Mobile VrApi\" ã¾ãŸã¯ " "\"OpenXR\" ã®å ´åˆã«ã®ã¿æœ‰åŠ¹ã§ã™ã€‚" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Passthrough\" 㯠\"Xr Mode\" ㌠\"OpenXR\" ã®å ´åˆã«ã®ã¿æœ‰åŠ¹ã§ã™ã€‚" #: platform/android/export/export_plugin.cpp @@ -18985,20 +19002,43 @@ msgstr "" "\"Export AAB\" 㯠\"Use Custom Build\" ãŒæœ‰åŠ¹ã§ã‚ã‚‹å ´åˆã«ã®ã¿æœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Min Sdk\" ã®å¤‰æ›´ã¯ \"Use Custom Build\" ãŒæœ‰åŠ¹ã§ã‚ã‚‹å ´åˆã«ã®ã¿æœ‰åŠ¹ã§ã™ã€‚" #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Target Sdk\" ã®å¤‰æ›´ã¯ \"Use Custom Build\" ãŒæœ‰åŠ¹ã§ã‚ã‚‹å ´åˆã«ã®ã¿æœ‰åŠ¹ã§ã™ã€‚" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "\"Target Sdk\" ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ \"Min Sdk\" ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸Šã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" @@ -20681,7 +20721,7 @@ msgstr "ズーム" msgid "Custom Viewport" msgstr "1 ビューãƒãƒ¼ãƒˆ" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -21441,6 +21481,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ãƒã‚¤ãƒ³ãƒ‰" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "è·é›¢ã‚’å–å¾—:" @@ -21449,6 +21494,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "è·é›¢ã‚’å–å¾—:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "高度ãªè¨å®š" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "有効" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21466,16 +21526,6 @@ msgstr "å·¦å³å転" msgid "Max Speed" msgstr "速度:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "è·é›¢ã‚’å–å¾—:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "有効" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -24919,6 +24969,11 @@ msgstr "フォルダー:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "é¸æŠžç¯„囲ã®ã¿" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "有効" @@ -25327,22 +25382,19 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"ã“ã®ãƒ“ューãƒãƒ¼ãƒˆã¯ãƒ¬ãƒ³ãƒ€ãƒ¼ ターゲットã¨ã—ã¦è¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。コンテンツを画" -"é¢ã«ç›´æŽ¥è¡¨ç¤ºã™ã‚‹å ´åˆã¯ã€ã‚µã‚¤ã‚ºã‚’å–å¾—ã§ãるよã†ã«ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã®åã«ã—ã¾ã™ã€‚ã" -"れ以外ã®å ´åˆã¯ã€RenderTarget ã«ã—ã¦ã€ãã®å†…部テクスãƒãƒ£ã‚’表示ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã«å‰²ã‚Š" -"当ã¦ã¾ã™ã€‚" +"レンダーã™ã‚‹ã«ã¯Viewportã®ç¸¦æ¨ªãã‚Œãžã‚ŒãŒ2ピクセル以上ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" -"レンダーã™ã‚‹ã«ã¯Viewportã®ç¸¦æ¨ªãã‚Œãžã‚ŒãŒ2ピクセル以上ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" #: scene/main/viewport.cpp msgid "ARVR" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index caf07e1063..14599ca68e 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -407,6 +407,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "დáƒáƒ›áƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებელი სიგნáƒáƒšáƒ˜:" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5496,6 +5501,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "ყველრმáƒáƒœáƒ˜áƒ¨áƒœáƒ•áƒ" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18503,6 +18513,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ¡áƒáƒ¦áƒ”ბების áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18511,6 +18526,16 @@ msgstr "" msgid "Export Format" msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ დáƒáƒ¥áƒ›áƒœáƒ˜áƒ¡ ცვლილებáƒ" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ ებელი" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "წáƒáƒ¨áƒšáƒ" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18547,16 +18572,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ ებელი" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "წáƒáƒ¨áƒšáƒ" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18791,12 +18806,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18805,17 +18820,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20411,7 +20446,7 @@ msgstr "ზუმის გáƒáƒ–რდáƒ" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21119,6 +21154,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "მუდმივი" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "დáƒáƒ§áƒ”ნებáƒ" @@ -21127,29 +21167,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "დáƒáƒ‘áƒáƒšáƒáƒœáƒ¡áƒ”ბული" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "დáƒáƒ›áƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებელი სიგნáƒáƒšáƒ˜:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "დáƒáƒ›áƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებელი სიგნáƒáƒšáƒ˜:" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24305,6 +24350,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ მხáƒáƒšáƒáƒ“" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "დáƒáƒ›áƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ ებელი სიგნáƒáƒšáƒ˜:" @@ -24687,16 +24737,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/km.po b/editor/translations/km.po index b58578c50d..32175987ef 100644 --- a/editor/translations/km.po +++ b/editor/translations/km.po @@ -385,6 +385,10 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5257,6 +5261,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17719,6 +17727,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Anim ផ្លាស់ប្ážáž¼ážš Transform" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17726,6 +17739,14 @@ msgstr "" msgid "Export Format" msgstr "" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17762,14 +17783,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -17988,12 +18001,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18002,17 +18015,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19520,7 +19553,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20184,6 +20217,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20192,27 +20229,31 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" +msgid "Avoidance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +msgid "Avoidance Enabled" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" +msgid "Time Horizon" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Max Speed" msgstr "" #: scene/2d/navigation_agent_2d.cpp @@ -23152,6 +23193,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23504,16 +23549,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/ko.po b/editor/translations/ko.po index fb4bf92e30..8800745e09 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -421,6 +421,11 @@ msgstr "메타" msgid "Command" msgstr "ëª…ë ¹" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (물리)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5468,6 +5473,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "마우스 부가 버튼으로 ížˆìŠ¤í† ë¦¬ 둘러보기" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "그리드맵 ì„ íƒ" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "모습" @@ -18634,6 +18644,11 @@ msgid "The package must have at least one '.' separator." msgstr "패키지는 ì ì–´ë„ í•˜ë‚˜ì˜ '.' 분리 기호가 있어야 합니다." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "노드 잘ë¼ë‚´ê¸°" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18642,6 +18657,16 @@ msgstr "" msgid "Export Format" msgstr "경로 내보내기" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "ìœ¤ê³½ì„ í¬ê¸°:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Target(대ìƒ)" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18684,16 +18709,6 @@ msgstr "ì´ì „ ì¸ìŠ¤í„´ìŠ¤ 검사" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "ìœ¤ê³½ì„ í¬ê¸°:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Target(대ìƒ)" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18940,14 +18955,14 @@ msgstr "플러그ì¸ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Use Custom Build\"ê°€ 활성화ë˜ì–´ì #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"ì† ì¶”ì \" ì€ \"Xr 모드\" ê°€ \"Oculus Mobile VR\"ì¼ ë•Œë§Œ 사용 가능합니다." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"ì† ì¶”ì \" ì€ \"Xr 모드\" ê°€ \"Oculus Mobile VR\"ì¼ ë•Œë§Œ 사용 가능합니다." @@ -18958,18 +18973,38 @@ msgstr "\"Export AAB\"는 \"Use Custom Build\"ê°€ í™œì„±í™”ëœ ê²½ìš°ì—만 ìœ í #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\"는 \"Use Custom Build\"ê°€ í™œì„±í™”ëœ ê²½ìš°ì—만 ìœ íš¨í•©ë‹ˆë‹¤." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\"는 \"Use Custom Build\"ê°€ í™œì„±í™”ëœ ê²½ìš°ì—만 ìœ íš¨í•©ë‹ˆë‹¤." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20653,7 +20688,7 @@ msgstr "줌 ì¸" msgid "Custom Viewport" msgstr "ë·°í¬íŠ¸ 1ê°œ" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21418,6 +21453,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ë°”ì¸ë”©" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "거리 ì„ íƒ:" @@ -21426,6 +21466,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "거리 ì„ íƒ:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "ê³ ê¸‰" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "활성화" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21443,16 +21498,6 @@ msgstr "수í‰ìœ¼ë¡œ 뒤집기" msgid "Max Speed" msgstr "ì†ë„:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "거리 ì„ íƒ:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "활성화" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -24875,6 +24920,11 @@ msgstr "í´ë”:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "ì„ íƒ ì˜ì—만" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "활성화" @@ -25285,22 +25335,19 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" -"ë·°í¬íŠ¸ë¥¼ ë Œë” ëŒ€ìƒìœ¼ë¡œ ì„¤ì •í•˜ì§€ 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ì— ì§ì ‘ 표시" -"í•˜ë ¤ë©´, Controlì˜ ìžì‹ 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. ê·¸ë ‡ì§€ ì•Šì„ ê²½" -"ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 ë·°í¬íŠ¸ë¥¼ RenderTarget으로 ë§Œë“¤ê³ ë‚´ë¶€ì ì¸ í…스처" -"를 다른 ë…¸ë“œì— ì§€ì •í•´ì•¼ 합니다." +"무엇ì´ë“ ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íŠ¸ í¬ê¸°ê°€ 양쪽 ì°¨ì›ì—ì„œ 2픽셀 ì´ìƒì´ì–´ì•¼ 합니다." #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" -"무엇ì´ë“ ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íŠ¸ í¬ê¸°ê°€ 양쪽 ì°¨ì›ì—ì„œ 2픽셀 ì´ìƒì´ì–´ì•¼ 합니다." #: scene/main/viewport.cpp msgid "ARVR" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 350bcb0352..51428b68f4 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -417,6 +417,11 @@ msgstr "" msgid "Command" msgstr "BendruomenÄ—" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fizikos Kadro %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5473,6 +5478,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Visas Pasirinkimas" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18503,6 +18513,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Transition Nodas" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18511,6 +18526,16 @@ msgstr "" msgid "Export Format" msgstr "Importuoti iÅ¡ Nodo:" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Atidaryti Skriptų Editorių" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "TimeScale Nodas" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18547,16 +18572,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Atidaryti Skriptų Editorių" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "TimeScale Nodas" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18793,12 +18808,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18807,17 +18822,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20436,7 +20471,7 @@ msgstr "Priartinti" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21143,6 +21178,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Konstanta" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Diegti" @@ -21151,29 +21191,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Ä®galinti" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Ä®galinti" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Ä®galinti" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24339,6 +24384,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Pasirinkite Nodus, kuriuos norite importuoti" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Ä®galinti" @@ -24722,16 +24772,17 @@ msgstr "Importuoti iÅ¡ Nodo:" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/lv.po b/editor/translations/lv.po index c80bd29122..0d2e4afec9 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -419,6 +419,11 @@ msgstr "" msgid "Command" msgstr "KomÅ«ns" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fizikas kadrs %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5544,6 +5549,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Režģkartes izvÄ“le" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18309,6 +18319,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Izgriezt mezglu(s)" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18317,6 +18332,16 @@ msgstr "" msgid "Export Format" msgstr "EksportÄ“t bibliotÄ“ku" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Galvenais Skripts:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "IzdzÄ“st Mezglu" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18356,16 +18381,6 @@ msgstr "IepriekÅ¡Ä“jÄ cilne" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Galvenais Skripts:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "IzdzÄ“st Mezglu" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18599,12 +18614,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18613,17 +18628,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20249,7 +20284,7 @@ msgstr "PalielinÄt" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -20967,6 +21002,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Konstante" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "IzvÄ“lÄ“ties galveno ainu" @@ -20975,29 +21015,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Papildus" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "IespÄ“jot" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "IespÄ“jot" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24206,6 +24251,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Tikai izvÄ“lÄ“tais" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "IespÄ“jot" @@ -24599,16 +24649,17 @@ msgstr "Fokusa ceļš" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/mk.po b/editor/translations/mk.po index 5c3bfc87ff..b35fce0168 100644 --- a/editor/translations/mk.po +++ b/editor/translations/mk.po @@ -389,6 +389,10 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5274,6 +5278,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17759,6 +17767,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Custom Build" +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17766,6 +17778,15 @@ msgstr "" msgid "Export Format" msgstr "" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Јазол" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17802,15 +17823,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Јазол" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18031,12 +18043,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18045,17 +18057,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19568,7 +19600,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20236,6 +20268,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20244,27 +20280,31 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" +msgid "Avoidance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +msgid "Avoidance Enabled" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" +msgid "Time Horizon" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Max Speed" msgstr "" #: scene/2d/navigation_agent_2d.cpp @@ -23217,6 +23257,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23571,16 +23615,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 7b247d8f78..b2f6c17059 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -394,6 +394,10 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5290,6 +5294,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17788,6 +17796,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•àµ¾:" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17796,6 +17809,14 @@ msgstr "" msgid "Export Format" msgstr "à´¤àµà´°à´¿à´®à´¾à´¨ പരിവർതàµà´¤à´¨à´‚ നോകàµà´•àµà´•" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17832,14 +17853,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18060,12 +18073,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18074,17 +18087,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19608,7 +19641,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20279,6 +20312,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20287,27 +20324,31 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" +msgid "Avoidance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +msgid "Avoidance Enabled" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" +msgid "Time Horizon" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Max Speed" msgstr "" #: scene/2d/navigation_agent_2d.cpp @@ -23295,6 +23336,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23650,16 +23695,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/mr.po b/editor/translations/mr.po index d7aa4bd1aa..d9943d0a5e 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -394,6 +394,10 @@ msgstr "" msgid "Command" msgstr "समà¥à¤¦à¤¾à¤¯" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5280,6 +5284,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17787,6 +17795,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17794,6 +17807,15 @@ msgstr "" msgid "Export Format" msgstr "" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "नोड हलवा" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17830,15 +17852,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "नोड हलवा" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18061,12 +18074,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18075,17 +18088,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19609,7 +19642,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20292,6 +20325,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20300,29 +20337,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "समकà¥à¤°à¤®à¤¿à¤¤ करा" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "समकà¥à¤°à¤®à¤¿à¤¤ करा" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "समकà¥à¤°à¤®à¤¿à¤¤ करा" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23322,6 +23364,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23678,16 +23724,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/ms.po b/editor/translations/ms.po index b297eb52a3..a1955bb027 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -395,6 +395,11 @@ msgstr "Meta" msgid "Command" msgstr "Perintah" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fizik" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5537,6 +5542,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Semua Pilihan" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18502,6 +18512,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Potong Nod" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18510,6 +18525,16 @@ msgstr "" msgid "Export Format" msgstr "Warna seragam." +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Saiz:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Cipta Nod" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18548,16 +18573,6 @@ msgstr "Tab sebelumnya" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Saiz:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Cipta Nod" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18800,12 +18815,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18814,17 +18829,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20453,7 +20488,7 @@ msgstr "Zum Masuk" msgid "Custom Viewport" msgstr "Tunjukkan Viewport" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21176,6 +21211,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Tampal Animasi" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Pilih Adegan Utama" @@ -21184,29 +21224,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Lanjutan" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktifkan" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktifkan" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24450,6 +24495,11 @@ msgstr "Folder:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Pilihan Sahaja" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktifkan" @@ -24847,16 +24897,17 @@ msgstr "Laluan Fokus" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/nb.po b/editor/translations/nb.po index a545e4fc83..11bf857f4b 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -412,6 +412,11 @@ msgstr "Meta" msgid "Command" msgstr "Kommando" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fysikk" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5721,6 +5726,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Slett Valgte" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19287,6 +19297,11 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy +msgid "Custom Build" +msgstr "Bruk Tilpasset Brukerkatalog" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "Use Custom Build" msgstr "Bruk Tilpasset Brukerkatalog" @@ -19295,6 +19310,16 @@ msgstr "Bruk Tilpasset Brukerkatalog" msgid "Export Format" msgstr "Eksporter Prosjekt" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Størrelse:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "MÃ¥l FPS" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19336,16 +19361,6 @@ msgstr "Forrige fane" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Størrelse:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "MÃ¥l FPS" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19591,12 +19606,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19605,17 +19620,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21283,7 +21318,7 @@ msgstr "Forstørr" msgid "Custom Viewport" msgstr "Vis hjelpere" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -22024,6 +22059,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Fyll" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Velg en HovedScene" @@ -22032,6 +22072,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avansert" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktiver" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -22049,15 +22103,6 @@ msgstr "Vend horisontalt" msgid "Max Speed" msgstr "Hastighet (FPS):" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktiver" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25366,6 +25411,11 @@ msgstr "Mappe:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Kun Valgte" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktiver" @@ -25769,16 +25819,17 @@ msgstr "Eksporter Prosjekt" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 32d57b08b9..def707ac8b 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -484,6 +484,11 @@ msgstr "" msgid "Command" msgstr "Gemeenschap" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Physics Frame %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5714,6 +5719,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap-selectie vullen" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19143,6 +19153,11 @@ msgid "The package must have at least one '.' separator." msgstr "De pakketnaam moet ten minste een '.' bevatten." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Knopen knippen" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19151,6 +19166,16 @@ msgstr "" msgid "Export Format" msgstr "Export Pad" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Omlijningsgrootte:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Doel" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -19194,16 +19219,6 @@ msgstr "Inspecteer vorige instantie" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Omlijningsgrootte:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Doel" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19453,7 +19468,7 @@ msgstr "\"Use Custom Build\" moet geactiveerd zijn om plugins te gebruiken." #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR\" " @@ -19461,7 +19476,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Hand Tracking\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR\" " "staat." @@ -19473,18 +19488,38 @@ msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat." #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21172,7 +21207,7 @@ msgstr "Inzoomen" msgid "Custom Viewport" msgstr "1 beeldvenster" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21944,6 +21979,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Binding" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Selecteerafstand:" @@ -21952,6 +21992,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Selecteerafstand:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Geavanceerd" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Inschakelen" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21969,16 +22024,6 @@ msgstr "Horizontaal omdraaien" msgid "Max Speed" msgstr "Snelheid:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Selecteerafstand:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Inschakelen" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -25395,6 +25440,11 @@ msgstr "Map:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Alleen selectie" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Inschakelen" @@ -25801,18 +25851,6 @@ msgid "Viewport Path" msgstr "Export Pad" #: 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 "" -"Dit beeldvenster is niet ingesteld als renderdoelwit. Als de inhoud op het " -"scherm getoond moet worden, moet je het een kind van een Control knoop " -"maken, zodat het een grootte kan ontvangen. Anders, maak er een RenderTarget " -"van en wijs zijn interne textuur toe aan een knoop om te tonen." - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25821,6 +25859,15 @@ msgstr "" "De grootte van een Viewport moet groter zijn dan 0 om iets weer te geven." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index e174b8a673..9fdaafae3e 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -61,13 +61,14 @@ # Konrad <kobe-interactive@protonmail.com>, 2022. # Pixel Zone - Godot Engine Tutorials <karoltomaszewskimusic@gmail.com>, 2022. # DK0492 <doriankaczmarek28@gmail.com>, 2022. +# Dawid Skubij <davidsd@tlen.pl>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-30 16:17+0000\n" -"Last-Translator: DK0492 <doriankaczmarek28@gmail.com>\n" +"PO-Revision-Date: 2022-07-05 23:51+0000\n" +"Last-Translator: Dawid Skubij <davidsd@tlen.pl>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" "Language: pl\n" @@ -76,7 +77,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -448,6 +449,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (fizyczny)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -714,9 +720,8 @@ msgstr "Kontrola wersji" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp -#, fuzzy msgid "Input" -msgstr "Input" +msgstr "WejÅ›cie" #: core/project_settings.cpp msgid "UI Accept" @@ -5616,6 +5621,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Wybór GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "WyglÄ…d" @@ -18857,6 +18867,11 @@ msgstr "Paczka musi mieć co najmniej jednÄ… kropkÄ™ jako separator." #: platform/android/export/export_plugin.cpp #, fuzzy +msgid "Custom Build" +msgstr "Użyj niestandardowego katalogu użytkownika" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "Use Custom Build" msgstr "Użyj niestandardowego katalogu użytkownika" @@ -18865,6 +18880,16 @@ msgstr "Użyj niestandardowego katalogu użytkownika" msgid "Export Format" msgstr "Åšcieżka eksportu" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Rozmiar zarysu:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Docelowa liczba klatek na sekundÄ™ (FPS)" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18908,16 +18933,6 @@ msgstr "Sprawdź poprzedniÄ… instancjÄ™" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Rozmiar zarysu:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Docelowa liczba klatek na sekundÄ™ (FPS)" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19166,15 +19181,17 @@ msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" musi być wÅ‚Ä…czone, by używać wtyczek." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" jest poprawne tylko, gdy \"Xr Mode\" jest \"Oculus Mobile " "VrApi\" lub \"OpenXR\"." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Passthrough\" jest poprawne tylko, gdy \"Xr Mode\" jest \"OpenXR\"." #: platform/android/export/export_plugin.cpp @@ -19183,22 +19200,45 @@ msgstr "" "\"Eksportuj AAB\" jest ważne tylko gdy \"Use Custom Build\" jest wÅ‚Ä…czone." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Zmiana \"Min Sdk\" jest poprawna tylko, gdy \"Use Custom Build\" jest " "wÅ‚Ä…czone." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Zmiana \"Target Sdk\" jest poprawna tylko, gdy \"Use Custom Build\" jest " "wÅ‚Ä…czone." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "Wersja \"Target Sdk\" musi być wiÄ™ksza lub równa wersji \"Min Sdk\"." #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20938,7 +20978,7 @@ msgstr "Przybliż" msgid "Custom Viewport" msgstr "1 widok" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21717,6 +21757,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "WiÄ…zanie" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Wybierz odlegÅ‚ość:" @@ -21725,6 +21770,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Wybierz odlegÅ‚ość:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Zaawansowane" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "WÅ‚Ä…cz" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21742,16 +21802,6 @@ msgstr "Odbij poziomo" msgid "Max Speed" msgstr "Szybkość:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Wybierz odlegÅ‚ość:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "WÅ‚Ä…cz" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -23582,9 +23632,8 @@ msgid "A RoomGroup should not be a child or grandchild of a Portal." msgstr "RoomGroup nie powinien być potomkiem Portalu." #: scene/3d/portal.cpp -#, fuzzy msgid "Portal Active" -msgstr " [portale aktywne]" +msgstr "Portal Aktywny" #: scene/3d/portal.cpp scene/resources/occluder_shape_polygon.cpp msgid "Two Way" @@ -25209,6 +25258,11 @@ msgstr "Folder:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Tylko zaznaczenie" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "WÅ‚Ä…cz" @@ -25545,9 +25599,8 @@ msgid "Draw 2D Outlines" msgstr "Utwórz obrys" #: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy msgid "Reflections" -msgstr "Kierunki" +msgstr "Odbicia" #: scene/main/scene_tree.cpp #, fuzzy @@ -25620,18 +25673,6 @@ msgstr "Åšcieżka eksportu" #: 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 "" -"Ten Viewport nie jest ustawiony jako Render Target. JeÅ›li chcesz wyÅ›wietlić " -"jego zawartość na ekranie dodaj go jako dziecko wÄ™zÅ‚a typu Control, aby " -"otrzymaÅ‚ jakiÅ› rozmiar. W przeciwnym wypadku ustawi opcjÄ™ RenderTarget i " -"przyporzÄ…dkuj jego teksturÄ™ dla któregoÅ› wÄ™zÅ‚a." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25639,6 +25680,15 @@ msgstr "" "cokolwiek renderować." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" @@ -26730,7 +26780,7 @@ msgstr "Warunek" #: scene/resources/environment.cpp msgid "Fog" -msgstr "" +msgstr "MgÅ‚a" #: scene/resources/environment.cpp #, fuzzy @@ -26912,9 +26962,8 @@ msgstr "" #: scene/resources/environment.cpp #: servers/audio/effects/audio_effect_chorus.cpp -#, fuzzy msgid "2" -msgstr "2D" +msgstr "2" #: scene/resources/environment.cpp #: servers/audio/effects/audio_effect_chorus.cpp diff --git a/editor/translations/pr.po b/editor/translations/pr.po index f60daf2f7b..d0e041aba9 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -413,6 +413,11 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Paste yer Node" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5460,6 +5465,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18559,6 +18569,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Slit th' Node" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18567,6 +18582,16 @@ msgstr "" msgid "Export Format" msgstr "Change yer Anim Transform" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Edit" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Slit th' Node" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18606,16 +18631,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Edit" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Slit th' Node" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18849,12 +18864,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18863,17 +18878,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20478,7 +20513,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21184,6 +21219,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Slit th' Node" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Edit" @@ -21192,29 +21232,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Paste yer Node" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Paste yer Node" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Paste yer Node" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24349,6 +24394,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Slit th' Node" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Paste yer Node" @@ -24731,16 +24781,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/pt.po b/editor/translations/pt.po index 7db8765ae3..edbc6971fb 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -407,6 +407,11 @@ msgstr "Meta" msgid "Command" msgstr "Comando" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (FÃsico)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5528,6 +5533,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "Botões extra do Mouse para Navegar no Histórico" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Seleção de GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Aparência" @@ -18620,6 +18630,11 @@ msgid "The package must have at least one '.' separator." msgstr "O pacote deve ter pelo menos um separador '.'." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Usar Compilação Personalizada" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "Usar Compilação Personalizada" @@ -18628,6 +18643,16 @@ msgstr "Usar Compilação Personalizada" msgid "Export Format" msgstr "Exportar Caminho" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Tamanho do contorno:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Alvo" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18671,16 +18696,6 @@ msgstr "Inspecionar instância anterior" msgid "Code" msgstr "Código" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Tamanho do contorno:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Alvo" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18936,15 +18951,17 @@ msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" têm de estar ativa para usar os plugins." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Rastreamento de Mão\" só é válido quando \"Modo Xr\" é \"Oculus Mobile " "VrApi\" ou \"OpenXR\"." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Passthrough\" só é válido quando \"Modo Xr\" é \"OpenXR\"." #: platform/android/export/export_plugin.cpp @@ -18952,20 +18969,43 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "\"Exportar AAB\" só é válido quando \"Use Custom Build\" está ativa." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Mudança de \"Min Sdk\" só é válida quando \"Use Custom Build\" está ativa." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Mudança de \"Target Sdk\" só é válida quando \"Use Custom Build\" está ativa." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "Versão de \"Target Sdk\" tem de ser maior ou igual à versão de \"Min Sdk\"." @@ -20640,7 +20680,7 @@ msgstr "Aumentar Zoom" msgid "Custom Viewport" msgstr "1 Viewport" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21412,6 +21452,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Ligação" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Distância de escolha:" @@ -21420,6 +21465,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Distância de escolha:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avançado" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Ativar" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21437,16 +21497,6 @@ msgstr "Inverter na Horizontal" msgid "Max Speed" msgstr "Velocidade:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Distância de escolha:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Ativar" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -24886,6 +24936,11 @@ msgstr "Pasta:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Apenas seleção" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Ativar" @@ -25298,18 +25353,6 @@ msgstr "Exportar Caminho" #: 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 "" -"Este viewport não está definida como alvo de Renderização. Se pretende " -"apresentar o seu conteúdo diretamente no ecrã, torne-a um filho de um " -"Control de modo a que obtenha um tamanho. Caso contrário, torne-a um " -"RenderTarget e atribua a sua textura interna a outro nó para visualizar." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25317,6 +25360,15 @@ msgstr "" "dimensões para renderizar." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 230c927086..41301db983 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -523,6 +523,11 @@ msgstr "Meta" msgid "Command" msgstr "Comando" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (FÃsico)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5654,6 +5659,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Seleção Do GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18844,6 +18854,11 @@ msgstr "O pacote deve ter pelo menos um separador '.'." #: platform/android/export/export_plugin.cpp #, fuzzy +msgid "Custom Build" +msgstr "Usar Diretório de Usuário Personalizado" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "Use Custom Build" msgstr "Usar Diretório de Usuário Personalizado" @@ -18852,6 +18867,15 @@ msgstr "Usar Diretório de Usuário Personalizado" msgid "Export Format" msgstr "Caminho de Exportação" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "SDK MÃnimo" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "FPS alvo" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18895,15 +18919,6 @@ msgstr "Inspecionar a Instância Anterior" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "SDK MÃnimo" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "FPS alvo" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19155,14 +19170,16 @@ msgstr "" "utilizar plugins." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Hand Tracking\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile VR\"." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Passthrough\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile VR\"." @@ -19173,22 +19190,45 @@ msgstr "" "habilitado." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Exportar AAB\" só é válido quando \"Usar Compilação Customizada\" está " "habilitado." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Exportar AAB\" só é válido quando \"Usar Compilação Customizada\" está " "habilitado." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "Versão do \"Target Sdk\" precisa ser igual ou maior que a versão do \"Min " "Sdk\"." @@ -20848,7 +20888,7 @@ msgstr "Ampliar" msgid "Custom Viewport" msgstr "1 Viewport" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21605,6 +21645,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "VInculamento" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Distância do Caminho U" @@ -21613,6 +21658,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "Distância Máxima do Caminho" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Avançado" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Habilitar" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21629,15 +21688,6 @@ msgstr "Inverter Horizontalmente" msgid "Max Speed" msgstr "Velocidade Máxima" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "Distância Máxima do Caminho" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Habilitar" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25011,6 +25061,11 @@ msgstr "Pasta:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Selecionar Apenas" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Habilitar" @@ -25420,19 +25475,6 @@ msgstr "Caminho de Exportação" #: 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 "" -"Este viewport não está definido como destino de renderização. Se você " -"pretende que ele mostre seu conteúdo diretamente na tela, faça-o filho de um " -"nó de Controle para que ele possa ter um tamanho. Caso contrário, defina-o " -"como destino de renderização e atribua sua textura interna a algum nó para " -"exibir." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25440,6 +25482,15 @@ msgstr "" "dimensões para renderizar algo." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index ddc340697c..cdd11f3980 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -418,6 +418,11 @@ msgstr "" msgid "Command" msgstr "Comunitate" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Cadru Fizic %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5619,6 +5624,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Toată selecÈ›ia" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18991,6 +19001,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Creează Nod" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18999,6 +19014,16 @@ msgstr "" msgid "Export Format" msgstr "Exportă Proiectul" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Dimensiunea Conturului:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Suprafață Èšintă:" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19037,16 +19062,6 @@ msgstr "Fila anterioară" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Dimensiunea Conturului:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Suprafață Èšintă:" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19292,12 +19307,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19306,17 +19321,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20968,7 +21003,7 @@ msgstr "Apropiere" msgid "Custom Viewport" msgstr "Arată Fereastra de Lucru" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21697,6 +21732,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "RotaÈ›ie aleatorie:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Alege o Scenă Principală" @@ -21705,29 +21745,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Avansate" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "ActivaÈ›i" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "ActivaÈ›i" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -25004,6 +25049,11 @@ msgstr "Folderul:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Numai SelecÈ›ia" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "ActivaÈ›i" @@ -25406,16 +25456,17 @@ msgstr "Exportă Proiectul" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 755683fdf0..84762459c8 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -115,13 +115,15 @@ # Deleted User <noreply+44465@weblate.org>, 2022. # Bozhko Artyom Dmitrievich <jek_sun@mail.ru>, 2022. # FuzzMix <fmwolfiechad@gmail.com>, 2022. +# Jasuse <jasusemaele@gmail.com>, 2022. +# Vadim Mitroshkin <Vadim7540@yandex.ru>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-12 13:19+0000\n" -"Last-Translator: FuzzMix <fmwolfiechad@gmail.com>\n" +"PO-Revision-Date: 2022-07-03 00:44+0000\n" +"Last-Translator: Vadim Mitroshkin <Vadim7540@yandex.ru>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -130,7 +132,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -469,14 +471,12 @@ msgid "Max Size (KB)" msgstr "МакÑимальный размер (КБ)" #: core/os/input.cpp -#, fuzzy msgid "Mouse Mode" -msgstr "Режим перемещениÑ" +msgstr "Режим мыши" #: core/os/input.cpp -#, fuzzy msgid "Use Accumulated Input" -msgstr "Удалить вход" +msgstr "ИÑпользовать накопленный ввод" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp @@ -503,6 +503,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (ФизичеÑкаÑ)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -2332,8 +2337,9 @@ msgid "Fix Dependencies" msgstr "ИÑправить завиÑимоÑти" #: editor/dependency_editor.cpp +#, fuzzy msgid "Errors loading!" -msgstr "Ошибки загрузки!" +msgstr "Ошибки загружаютÑÑ!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" @@ -5588,6 +5594,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð¿Ð¾ иÑтории дополнительными кнопками мыши" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Выделение Ñетки" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Внешний вид" @@ -9530,7 +9541,7 @@ msgstr "Иконка" #: editor/plugins/item_list_editor_plugin.cpp msgid "ID" -msgstr "" +msgstr "Идентификатор" #: editor/plugins/item_list_editor_plugin.cpp #: scene/resources/default_theme/default_theme.cpp @@ -17055,7 +17066,7 @@ msgstr "Скин Godot" #: modules/gltf/gltf_spec_gloss.cpp msgid "Diffuse Img" -msgstr "" +msgstr "РаÑÑеÑнное изображение" #: modules/gltf/gltf_spec_gloss.cpp msgid "Diffuse Factor" @@ -18486,6 +18497,11 @@ msgstr "Пакет должен иметь Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один раздели #: platform/android/export/export_plugin.cpp #, fuzzy +msgid "Custom Build" +msgstr "ИÑпользовать ÑобÑтвенную директорию данных пользователÑ" + +#: platform/android/export/export_plugin.cpp +#, fuzzy msgid "Use Custom Build" msgstr "ИÑпользовать ÑобÑтвенную директорию данных пользователÑ" @@ -18494,6 +18510,16 @@ msgstr "ИÑпользовать ÑобÑтвенную директорию дРmsgid "Export Format" msgstr "Путь ÑкÑпорта" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Минимальный размер" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Целевой FPS" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18537,16 +18563,6 @@ msgstr "ОÑмотреть предыдущий ÑкземплÑÑ€" msgid "Code" msgstr "Код" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Минимальный размер" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Целевой FPS" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18800,15 +18816,17 @@ msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "«Use Custom Build» должен быть включен Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð²." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "«Hand Tracking» дейÑтвителен только тогда, когда «Xr Mode» уÑтановлен в " "«Oculus Mobile VrApi» или «OpenXR»." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "«Passthrough» дейÑтвителен только тогда, когда «Xr Mode» уÑтановлен в " "«OpenXR»." @@ -18820,22 +18838,45 @@ msgstr "" "пользовательÑкую Ñборку»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Изменение «Min Sdk» дейÑтвительно только еÑли включён параметр «ИÑпользовать " "пользовательÑкую Ñборку»." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Изменение «Target Sdk» дейÑтвительно только еÑли включён параметр " "«ИÑпользовать пользовательÑкую Ñборку»." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "ВерÑÐ¸Ñ Â«Target Sdk» должна быть больше или равна верÑии «Min Sdk»." #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20543,7 +20584,7 @@ msgstr "Приблизить" msgid "Custom Viewport" msgstr "1 Окно" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21293,6 +21334,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ПривÑзка" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "РаÑÑтоÑние пути U" @@ -21301,6 +21347,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "МакÑимальное раÑÑтоÑние пути" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Дополнительно" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Включить" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21317,16 +21378,6 @@ msgstr "Перевернуть по горизонтали" msgid "Max Speed" msgstr "ÐœÐ°ÐºÑ ÑкороÑÑ‚ÑŒ" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "МакÑимальное раÑÑтоÑние пути" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Включить" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -24704,6 +24755,11 @@ msgstr "ПолоÑа ÑворачиваниÑ" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Только выделенное" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Включить" @@ -25105,19 +25161,6 @@ 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 "" -"Ðтот viewport не уÑтановлен в качеÑтве цели рендеринга. ЕÑли вы ÑобираетеÑÑŒ " -"иÑпользовать его Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñодержимого прÑмо на Ñкран, то Ñделайте её " -"потомком Control'а, чтобы он мог получить размер. Ð’ противном Ñлучае, " -"Ñделайте его целью рендеринга и назначьте его внутреннюю текÑтуру какому-" -"либо узлу Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25125,6 +25168,15 @@ msgstr "" "измерениÑÑ…, чтобы отобразить что-либо." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" @@ -26894,7 +26946,7 @@ msgstr "Передвинуть точки" #: scene/resources/packed_scene.cpp msgid "Bundled" -msgstr "" +msgstr "Вложенный" #: scene/resources/particles_material.cpp msgid "Trail" @@ -27947,12 +27999,12 @@ msgstr "СовмеÑтимоÑÑ‚ÑŒ" #: servers/visual_server.cpp msgid "Disable Half Float" -msgstr "" +msgstr "Выключить вещеÑтвенные чиÑла половинной точноÑти" #: servers/visual_server.cpp #, fuzzy msgid "Enable High Float" -msgstr "Включить приоритет" +msgstr "Включить вещеÑтвенные чиÑла повышенной точноÑти" #: servers/visual_server.cpp msgid "Precision" @@ -27967,13 +28019,12 @@ msgid "UV Contract Amount" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Use Simple PVS" -msgstr "ИÑпользовать привÑзку маÑштабированиÑ" +msgstr "ИÑпользовать проÑтой PVS" #: servers/visual_server.cpp msgid "PVS Logging" -msgstr "" +msgstr "ВеÑти запиÑÑŒ PVS" #: servers/visual_server.cpp msgid "Use Signals" @@ -28003,17 +28054,17 @@ msgid "Max Active Polygons" msgstr "МакÑимальное количеÑтво активных полигонов" #: servers/visual_server.cpp -#, fuzzy msgid "Shader Compilation Mode" -msgstr "Режим интерполÑции" +msgstr "Режим компилÑции шейдеров" #: servers/visual_server.cpp msgid "Max Simultaneous Compiles" -msgstr "" +msgstr "МакÑимальное количеÑтво одновременных компилÑций" #: servers/visual_server.cpp +#, fuzzy msgid "Log Active Async Compiles Count" -msgstr "" +msgstr "РегиÑтрировать количеÑтво активных аÑинхронных компилÑций" #: servers/visual_server.cpp msgid "Shader Cache Size (MB)" diff --git a/editor/translations/si.po b/editor/translations/si.po index 2e5042392f..ae1abeaa5a 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -398,6 +398,10 @@ msgstr "" msgid "Command" msgstr "" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5333,6 +5337,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17988,6 +17996,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "යà¶à·”රු පිටපà¶à·Š කරන්න" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17996,6 +18009,15 @@ msgstr "" msgid "Export Format" msgstr "Anim පරිවර්à¶à¶±à¶º වෙනස් කරන්න" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "යà¶à·”රු මක෠දමන්න" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18032,15 +18054,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "යà¶à·”රු මක෠දමන්න" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18266,12 +18279,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18280,17 +18293,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19828,7 +19861,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20515,6 +20548,10 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Pathfinding" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20523,29 +20560,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "සමà¶à·”ලිà¶à¶ºà·’" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "මෙම ලුහුබදින්න෠ඉවà¶à·Š කරන්න." + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "මෙම ලුහුබදින්න෠ඉවà¶à·Š කරන්න." +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23611,6 +23653,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23981,16 +24027,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 9e18f67b73..6e20ee48da 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -431,6 +431,11 @@ msgstr "" msgid "Command" msgstr "Komunita" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fyzická SnÃmka %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5644,6 +5649,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "VÅ¡etky vybrané" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18915,6 +18925,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "VložiÅ¥" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18923,6 +18938,16 @@ msgstr "" msgid "Export Format" msgstr "KonÅ¡tanty:" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "VeľkosÅ¥: " + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "VytvoriÅ¥ Node" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18961,16 +18986,6 @@ msgstr "Minulá karta" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "VeľkosÅ¥: " - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "VytvoriÅ¥ Node" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19216,12 +19231,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19230,17 +19245,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20891,7 +20926,7 @@ msgstr "PriblÞiÅ¥" msgid "Custom Viewport" msgstr "ZobraziÅ¥ Výrez" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21627,6 +21662,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "PrilepiÅ¥ Animáciu" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Vyberte hlavnú scénu" @@ -21635,29 +21675,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "PokroÄilé" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "PovoliÅ¥" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "PovoliÅ¥" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24931,6 +24976,11 @@ msgstr "PrieÄinok:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Iba Výber" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "PovoliÅ¥" @@ -25331,16 +25381,17 @@ msgstr "ZameraÅ¥ Cestu" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/sl.po b/editor/translations/sl.po index b796c872f7..43eb784a39 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -404,6 +404,11 @@ msgstr "" msgid "Command" msgstr "Skupnost" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fizikalni Okvir %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5715,6 +5720,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap IzbriÅ¡i Izbor" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19206,6 +19216,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Gradnik Prehod" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19214,6 +19229,16 @@ msgstr "" msgid "Export Format" msgstr "Izvozi Projekt" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Zaženi Skripto" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Gradnik ÄŒasovnoMerilo" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19253,16 +19278,6 @@ msgstr "PrejÅ¡nji zavihek" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Zaženi Skripto" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Gradnik ÄŒasovnoMerilo" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19509,12 +19524,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19523,17 +19538,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21190,7 +21225,7 @@ msgstr "Približaj" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21922,6 +21957,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Prilepi animacijo" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Izberi Glavno Sceno" @@ -21930,29 +21970,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Možnosti pripenjanja" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "OmogoÄi" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "OmogoÄi" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -25228,6 +25273,11 @@ msgstr "Ustvarite Mapo" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Samo Izbira" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "OmogoÄi" @@ -25624,16 +25674,17 @@ msgstr "Izvozi Projekt" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/sq.po b/editor/translations/sq.po index ae64fa2e6f..b11dc2f46f 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -415,6 +415,11 @@ msgstr "" msgid "Command" msgstr "Komuniteti" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Hapi i Fizikës %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5651,6 +5656,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Fshi të Selektuarat" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18698,6 +18708,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Dyfisho Nyjet" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18706,6 +18721,16 @@ msgstr "" msgid "Export Format" msgstr "Konstantet" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Madhësia: " + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Fshi Nyjen" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18744,16 +18769,6 @@ msgstr "Tabi i mëparshëm" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Madhësia: " - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Fshi Nyjen" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18998,12 +19013,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19012,17 +19027,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20654,7 +20689,7 @@ msgstr "" msgid "Custom Viewport" msgstr "Zgjidh një 'Viewport'" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21359,6 +21394,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Konstantet" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Zgjidh një Skenë Kryesore" @@ -21367,29 +21407,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "I Balancuar" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Lejo" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Lejo" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24550,6 +24595,11 @@ msgstr "Folderi:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Zgjidh Këtë Folder" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Lejo" @@ -24941,16 +24991,17 @@ msgstr "Fokuso Rrugën" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 89a0067fe9..e4a0475e3f 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -431,6 +431,11 @@ msgstr "" msgid "Command" msgstr "Заједница" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Слика физике %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5964,6 +5969,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "МапаМреже ИÑпуни Одабрано" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -20554,6 +20564,11 @@ msgid "The package must have at least one '.' separator." msgstr "Паковање мора имати бар један '.' раздвојник." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Ðаправи чвор" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -20562,6 +20577,16 @@ msgstr "" msgid "Export Format" msgstr "Извези пројекат" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Величина ивице:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Мета" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -20604,16 +20629,6 @@ msgstr "ИÑтражи Претходну ИнÑтанцу" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Величина ивице:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Мета" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -20876,12 +20891,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -20890,17 +20905,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -22599,7 +22634,7 @@ msgstr "Увеличај" msgid "Custom Viewport" msgstr "1 прозор" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -23374,6 +23409,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Спојеви" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Одабери ОдÑтојање:" @@ -23382,6 +23422,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Одабери ОдÑтојање:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "ПоÑтавке залепљавања" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Укључи" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -23399,16 +23454,6 @@ msgstr "Обрни Хоризонтално" msgid "Max Speed" msgstr "Брзина (FPS):" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Одабери ОдÑтојање:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Укључи" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -26884,6 +26929,11 @@ msgstr "ПреÑавији линију" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Само одабрано" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Укључи" @@ -27294,24 +27344,20 @@ msgstr "Извези пројекат" #: scene/main/viewport.cpp #, fuzzy msgid "" -"This viewport is not set as render target. If you intend for it to display " -"its contents directly to the screen, make it a child of a Control so it can " -"obtain a size. Otherwise, make it a RenderTarget and assign its internal " -"texture to some node for display." -msgstr "" -"Овај viewport није поÑтављен као мета за иÑцртавање. Ðко намераваш да " -"прикаже Ñадржај директно на екран, учини га дететом Контроле да може да " -"добави величину. У Ñупротном, учини га МетомИÑцртавања и додели његову " -"унутрашњу текÑтуру неком чвору за приказ." - -#: 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 "Величина Viewport-а мора бити већа од 0 да би Ñе нешто иÑцртало." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 844e918f2d..9bbc31e19a 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -406,6 +406,11 @@ msgstr "" msgid "Command" msgstr "Zajednica" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Filtriraj signale" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5350,6 +5355,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Sve sekcije" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18053,6 +18063,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Animacija Uduplaj KljuÄeve" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18061,6 +18076,15 @@ msgstr "" msgid "Export Format" msgstr "Homogenost Boje." +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Ukloni ÄŒvor" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18097,15 +18121,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Ukloni ÄŒvor" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -18336,12 +18351,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18350,17 +18365,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19919,7 +19954,7 @@ msgstr "UveliÄaj" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20619,6 +20654,11 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Pathfinding" +msgstr "Kontanta" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20627,29 +20667,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Napredno" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Filtriraj signale" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Filtriraj signale" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -23771,6 +23816,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Samo Obeleženo" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Filtriraj signale" @@ -24147,16 +24197,17 @@ msgstr "Putanja" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 61e607d63d..010299e2cf 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -442,6 +442,11 @@ msgstr "" msgid "Command" msgstr "Gemenskap" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Fysik Bildruta %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5660,6 +5665,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Alla urval" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18984,6 +18994,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Klipp ut Noder" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18992,6 +19007,16 @@ msgstr "" msgid "Export Format" msgstr "Exportera Projekt" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Storlek:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Byt Förälder-Node" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19030,16 +19055,6 @@ msgstr "FöregÃ¥ende flik" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Storlek:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Byt Förälder-Node" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19284,12 +19299,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19298,17 +19313,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20964,7 +20999,7 @@ msgstr "Zooma In" msgid "Custom Viewport" msgstr "Vy underifrÃ¥n" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21696,6 +21731,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Slumpmässig Rotation:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Välj en Huvudscen" @@ -21704,29 +21744,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "Avancerad" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Aktivera" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Aktivera" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -25008,6 +25053,11 @@ msgstr "Mapp:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Endast Urval" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Aktivera" @@ -25405,16 +25455,17 @@ msgstr "Exportera Projekt" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/te.po b/editor/translations/te.po index 431febd63c..9e49f9dcc5 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -388,6 +388,10 @@ msgstr "" msgid "Command" msgstr "సంఘం" +#: core/os/input_event.cpp +msgid "Physical" +msgstr "" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5259,6 +5263,10 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +msgid "Drag And Drop Selection" +msgstr "" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -17717,6 +17725,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Custom Build" +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -17724,6 +17736,15 @@ msgstr "" msgid "Export Format" msgstr "" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "నోడà±" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -17760,15 +17781,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "నోడà±" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "" @@ -17988,12 +18000,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18002,17 +18014,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19527,7 +19559,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20196,6 +20228,11 @@ msgid "" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Pathfinding" +msgstr "à°¸à±à°¥à°¿à°°à°¾à°‚కాలà±" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" msgstr "" @@ -20204,27 +20241,31 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" +msgid "Avoidance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +msgid "Avoidance Enabled" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" +msgid "Time Horizon" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Max Speed" msgstr "" #: scene/2d/navigation_agent_2d.cpp @@ -23184,6 +23225,10 @@ msgid "Fold Gutter" msgstr "" #: scene/gui/text_edit.cpp +msgid "Drag And Drop Selection Enabled" +msgstr "" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "" @@ -23540,16 +23585,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/th.po b/editor/translations/th.po index df7f3a8c04..1a6a4b71be 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -438,6 +438,11 @@ msgstr "" msgid "Command" msgstr "ชุมชน" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "% ขà¸à¸‡à¹€à¸Ÿà¸£à¸¡à¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5639,6 +5644,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "เติมที่เลืà¸à¸à¹ƒà¸™ GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18936,6 +18946,11 @@ msgid "The package must have at least one '.' separator." msgstr "à¹à¸žà¹‡à¸„เà¸à¸ˆà¸ˆà¸³à¹€à¸›à¹‡à¸™à¸•à¹‰à¸à¸‡à¸¡à¸µ '.' à¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢à¸«à¸™à¸¶à¹ˆà¸‡à¸•à¸±à¸§" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ตัดโหนด" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18944,6 +18959,16 @@ msgstr "" msgid "Export Format" msgstr "ไดเรà¸à¸—à¸à¸£à¸µà¸ªà¹ˆà¸‡à¸à¸à¸" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "ขนาดเส้นรà¸à¸šà¸£à¸¹à¸›:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "เป้าหมาย" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18986,16 +19011,6 @@ msgstr "ตรวจสà¸à¸šà¸à¸´à¸™à¸ªà¹à¸•à¸™à¸‹à¹Œà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸² msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "ขนาดเส้นรà¸à¸šà¸£à¸¹à¸›:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "เป้าหมาย" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19242,13 +19257,13 @@ msgstr "\"Use Custom Build\" จำเป็นต้à¸à¸‡à¹€à¸›à¸´à¸”à¸à¸²à¸£ #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "\"Hand Tracking\" จะสามารถใช้ได้เมื่ภ\"Xr Mode\" เป็น \"Oculus Mobile VR\"" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"Hand Tracking\" จะสามารถใช้ได้เมื่ภ\"Xr Mode\" เป็น \"Oculus Mobile VR\"" #: platform/android/export/export_plugin.cpp @@ -19258,18 +19273,38 @@ msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่à¸à¹€ #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่à¸à¹€à¸›à¸´à¸”ใช้งาน \"Use Custom Build\"" #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่à¸à¹€à¸›à¸´à¸”ใช้งาน \"Use Custom Build\"" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20946,7 +20981,7 @@ msgstr "ขยาย" msgid "Custom Viewport" msgstr "1 วิวพà¸à¸£à¹Œà¸•" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21707,6 +21742,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ปุ่มลัด" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸:" @@ -21715,6 +21755,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "ขั้นสูง" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "เปิด" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21732,16 +21787,6 @@ msgstr "พลิà¸à¹à¸™à¸§à¸™à¸à¸™" msgid "Max Speed" msgstr "ความเร็ว:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "เปิด" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -25117,6 +25162,11 @@ msgstr "โฟลเดà¸à¸£à¹Œ:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "เฉพาะที่à¸à¸³à¸¥à¸±à¸‡à¹€à¸¥à¸·à¸à¸" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "เปิด" @@ -25523,17 +25573,6 @@ msgid "Viewport Path" 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 "" -"Viewport นี้ไม่ได้เป็น render target ถ้าท่านต้à¸à¸‡à¸à¸²à¸£à¹à¸ªà¸”งผลบนหน้าจà¸à¹‚ดยตรง " -"ให้à¹à¸à¹‰à¹„ขโหนดนี้ให้เป็นโหนดลูà¸à¸‚à¸à¸‡ Control à¹à¸•à¹ˆà¸–้าไม่ ให้ปรับเป็น render target à¹à¸¥à¸°à¸™à¸³à¹„ปใช้เป็น " -"texture ขà¸à¸‡à¹‚หนดà¸à¸·à¹ˆà¸™" - -#: scene/main/viewport.cpp #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25541,6 +25580,15 @@ msgid "" msgstr "ขนาดวิวพà¸à¸£à¹Œà¸•à¸ˆà¸°à¸•à¹‰à¸à¸‡à¸¡à¸²à¸à¸à¸§à¹ˆà¸² 0 เพื่à¸à¸—ี่จะเรนเดà¸à¸£à¹Œà¹„ด้" #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/tl.po b/editor/translations/tl.po index f67f19ad11..d5a5d52332 100644 --- a/editor/translations/tl.po +++ b/editor/translations/tl.po @@ -415,6 +415,11 @@ msgstr "" msgid "Command" msgstr "Pamayanan" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Paganahin" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5453,6 +5458,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Kopyahin Ang Pinagpipilian" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18258,6 +18268,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Kopyahin ang mga Node" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18266,6 +18281,16 @@ msgstr "" msgid "Export Format" msgstr "Iluwas ang Library" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Pangunahing Skrip:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Pinagtututukan" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18304,16 +18329,6 @@ msgstr "Nakaraang tab" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Pangunahing Skrip:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Pinagtututukan" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18552,12 +18567,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18566,17 +18581,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20201,7 +20236,7 @@ msgstr "Palakihin Ang Tanaw" msgid "Custom Viewport" msgstr "1 Tinginan" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -20918,6 +20953,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Constant" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Pumili ng Pangunahing Eksena" @@ -20926,6 +20966,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Paganahin" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Paganahin" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -20942,15 +20996,6 @@ msgstr "" msgid "Max Speed" msgstr "Bilis:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Paganahin" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -24179,6 +24224,11 @@ msgstr "Folder:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Napili lang" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Paganahin" @@ -24570,14 +24620,6 @@ msgstr "1 Tinginan" #: 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 "" @@ -24585,6 +24627,15 @@ msgstr "" "alinman." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 89854afb02..1e4ab521bf 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -73,13 +73,14 @@ # inci <incialien@gmail.com>, 2022. # Ramazan Aslan <legendraslan@gmail.com>, 2022. # paledega <paledega@yandex.ru>, 2022. +# Yekez <yasintonge@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-26 16:16+0000\n" -"Last-Translator: paledega <paledega@yandex.ru>\n" +"PO-Revision-Date: 2022-07-03 00:44+0000\n" +"Last-Translator: Yekez <yasintonge@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -91,7 +92,7 @@ msgstr "" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "Tablet Sürücüsü" +msgstr "Tablet Sürücü" #: core/bind/core_bind.cpp msgid "Clipboard" @@ -99,7 +100,7 @@ msgstr "Pano" #: core/bind/core_bind.cpp msgid "Current Screen" -msgstr "Åžu anki ekran" +msgstr "Åžu anki Ekran" #: core/bind/core_bind.cpp msgid "Exit Code" @@ -107,7 +108,7 @@ msgstr "Çıkış Kodu" #: core/bind/core_bind.cpp msgid "V-Sync Enabled" -msgstr "V-Sync EtkinleÅŸtirildi" +msgstr "V-Sync Etkin" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" @@ -461,6 +462,11 @@ msgstr "Meta" msgid "Command" msgstr "Komut" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (Fiziksel)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5643,6 +5649,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap Seçimi" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18860,6 +18871,11 @@ msgid "The package must have at least one '.' separator." msgstr "Paket en azından bir tane '.' ayıracına sahip olmalıdır." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ÖzelSınıf" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18868,6 +18884,16 @@ msgstr "" msgid "Export Format" msgstr "Dışa aktarım Yolu" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "Kontur Boyutu:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Hedef" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18911,16 +18937,6 @@ msgstr "Önceki ÖrneÄŸi Ä°ncele" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "Kontur Boyutu:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Hedef" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19170,15 +19186,17 @@ msgstr "" "Eklentileri kullanabilmek için \"Özel Derleme Kullan\" seçeneÄŸi aktif olmalı." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"El Takibi (Hand Tracking)\" sadece \"Xr Modu\" \"Oculus Mobile VR\" ya da " "\"OpenXR\" olduÄŸunda geçerlidir." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "\"İçinden Geçme\" sadece \"Xr Mod\" \"OpenXR\" ise geçerlidir." #: platform/android/export/export_plugin.cpp @@ -19188,22 +19206,45 @@ msgstr "" "geçerlidir." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Min Sdk\" deÄŸiÅŸtirilmesi sadece \"Özel Yapı\" etkinleÅŸtirildiÄŸinde " "geçerlidir." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Target Sdk\" deÄŸiÅŸtirilmesi sadece \"Özel Yapı\" etkinleÅŸtirildiÄŸinde " "geçerlidir." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" "\"Target Sdk\" sürümü \"Min Sdk\" sürümünden daha büyük veya eÅŸit olmalıdır." @@ -20894,7 +20935,7 @@ msgstr "YaklaÅŸtır" msgid "Custom Viewport" msgstr "1 Görüntü Kapısı" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21667,6 +21708,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "BaÄŸlayıcı" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Uzaklık Seç:" @@ -21675,6 +21721,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "Uzaklık Seç:" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "GeliÅŸmiÅŸ" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Etkin" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21692,16 +21753,6 @@ msgstr "Yatay Yansıt" msgid "Max Speed" msgstr "Hız:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "Uzaklık Seç:" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Etkin" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -25148,6 +25199,11 @@ msgstr "Dosya:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Yalnızca Seçim" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Etkin" @@ -25559,18 +25615,6 @@ msgstr "Dışa aktarım Yolu" #: 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 "" -"Bu görüntükapısı bir iÅŸleyici hedefi olarak ayarlanmamış. EÄŸer bunu doÄŸrudan " -"ekran içeriÄŸini görüntülemek için düşünüyorsanız, bir Control'ün çocuÄŸu " -"yapın böylece bir boyut elde edebilir. Aksi takdirde, Görüntüleme için bunu " -"bir RenderTarget yap ve dahili dokusunu herhangi bir düğüme ata." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -25578,6 +25622,15 @@ msgstr "" "pikselden büyük ya da buna eÅŸit olmalıdır." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 719dc29d7a..4d22a47dea 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -23,13 +23,14 @@ # Wald Sin <naaveranos@gmail.com>, 2022. # Гліб Соколов <ramithes@i.ua>, 2022. # Max Donchenko <maxx.donchenko@gmail.com>, 2022. +# Artem <artem@molotov.work>, 2022. msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-12 13:19+0000\n" -"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"PO-Revision-Date: 2022-07-03 00:44+0000\n" +"Last-Translator: Artem <artem@molotov.work>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" "Language: uk\n" @@ -38,7 +39,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -378,14 +379,12 @@ msgid "Max Size (KB)" msgstr "МакÑ. розмір (кБ)" #: core/os/input.cpp -#, fuzzy msgid "Mouse Mode" -msgstr "Режим переміщеннÑ" +msgstr "Режим миші" #: core/os/input.cpp -#, fuzzy msgid "Use Accumulated Input" -msgstr "Видалити введеннÑ" +msgstr "ВикориÑтати накопичувальне введеннÑ" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp @@ -412,6 +411,11 @@ msgstr "Meta" msgid "Command" msgstr "Команда" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (фізичний)" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -662,14 +666,12 @@ msgid "Script Templates Search Path" msgstr "ШлÑÑ… пошуку Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð² Ñкриптів" #: core/project_settings.cpp -#, fuzzy msgid "Version Control Autoload On Startup" -msgstr "Ðвтоматично завантажувати під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку" +msgstr "Ðвтоматичне Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку" #: core/project_settings.cpp -#, fuzzy msgid "Version Control Plugin Name" -msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" +msgstr "Ðазва додатка ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -2186,7 +2188,7 @@ msgstr "Відкрити" #: editor/dependency_editor.cpp msgid "Owners of: %s (Total: %d)" -msgstr "" +msgstr "ВлаÑник: %s (Загалом: %d)" #: editor/dependency_editor.cpp msgid "" @@ -2746,22 +2748,19 @@ msgstr "Оберіть" #: editor/editor_export.cpp msgid "Project export for platform:" -msgstr "" +msgstr "ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸:" #: editor/editor_export.cpp -#, fuzzy msgid "Completed with errors." -msgstr "Повні шлÑхи до файлів" +msgstr "Завершено з помилками." #: editor/editor_export.cpp -#, fuzzy msgid "Completed successfully." -msgstr "Пакунок уÑпішно вÑтановлено!" +msgstr "Завершено уÑпішно." #: editor/editor_export.cpp -#, fuzzy msgid "Failed." -msgstr "Ðе вдалоÑÑ:" +msgstr "Помилка." #: editor/editor_export.cpp msgid "Storing File:" @@ -2776,29 +2775,24 @@ msgid "Packing" msgstr "ПакуваннÑ" #: editor/editor_export.cpp -#, fuzzy msgid "Save PCK" -msgstr "Зберегти Ñк" +msgstr "Зберегти PCK" #: editor/editor_export.cpp -#, fuzzy msgid "Cannot create file \"%s\"." -msgstr "Ðеможливо Ñтворити теку." +msgstr "Ðе вдалоÑÑ Ñтворити файл «%s»." #: editor/editor_export.cpp -#, fuzzy msgid "Failed to export project files." -msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту" +msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту." #: editor/editor_export.cpp -#, fuzzy msgid "Can't open file to read from path \"%s\"." -msgstr "Ðеможливо відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу:" +msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ñ– шлÑху «%s»." #: editor/editor_export.cpp -#, fuzzy msgid "Save ZIP" -msgstr "Зберегти Ñк" +msgstr "Зберегти ZIP" #: editor/editor_export.cpp msgid "" @@ -2918,30 +2912,25 @@ msgid "Custom release template not found." msgstr "Ðетипового шаблону випуÑку не знайдено." #: editor/editor_export.cpp -#, fuzzy msgid "Prepare Template" -msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸" +msgstr "Приготувати шаблон" #: editor/editor_export.cpp platform/osx/export/export.cpp -#, fuzzy msgid "The given export path doesn't exist." -msgstr "Вказаного шлÑху Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує:" +msgstr "Вказаного шлÑху Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує." #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found: \"%s\"." -msgstr "Файл шаблону не знайдено:" +msgstr "Ðе знайдено файла шаблона: «%s»." #: editor/editor_export.cpp -#, fuzzy msgid "Failed to copy export template." -msgstr "Ðеправильний шаблон екÑпорту:" +msgstr "Ðе вдалоÑÑ Ñкопіювати шаблон екÑпортуваннÑ." #: editor/editor_export.cpp platform/windows/export/export.cpp #: platform/x11/export/export.cpp -#, fuzzy msgid "PCK Embedding" -msgstr "ФаÑка" +msgstr "Ð’Ð±ÑƒÐ´Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ PCK" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." @@ -5216,9 +5205,8 @@ msgstr "" "меню «ЕкÑпорт» або визначне наÑвний набір Ñк придатний до викориÑтаннÑ." #: editor/editor_run_native.cpp -#, fuzzy msgid "Project Run" -msgstr "Проєкт" +msgstr "ЗапуÑк проєкту" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -5502,6 +5490,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "Додаткові кнопки миші Ð´Ð»Ñ Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ— журналом" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Вибір GridMap" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "ВиглÑд" @@ -7156,12 +7149,18 @@ msgid "" "%s: Texture detected as used as a normal map in 3D. Enabling red-green " "texture compression to reduce memory usage (blue channel is discarded)." msgstr "" +"%s: виÑвлено текÑтуру, Ñк викориÑтано Ñк нормальну карту у проÑторовій " +"формі. Вмикаємо ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‡ÐµÑ€Ð²Ð¾Ð½Ð¾-зеленої текÑтури Ð´Ð»Ñ Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ ÑÐ¿Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ " +"пам'ÑÑ‚Ñ– (канал Ñинього відкинуто)." #: editor/import/resource_importer_texture.cpp msgid "" "%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " "generation and VRAM texture compression." msgstr "" +"%s: виÑвлено, що текÑтуру викориÑтано у проÑторовій формі. Вмикаємо " +"фільтруваннÑ, повтореннÑ, ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ð½Ð¾Ð³Ð¾ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° ÑтиÑÐºÐ°Ð½Ð½Ñ " +"текÑтур у відеопам'ÑÑ‚Ñ–." #: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" @@ -11504,9 +11503,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Ðекоректна геометріÑ, неможливо замінити Ñіткою." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to MeshInstance2D" -msgstr "Перетворити на Mesh2D" +msgstr "Перетворити на MeshInstance2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12875,14 +12873,12 @@ msgid "Selected Collision" msgstr "Позначене зіткненнÑ" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Selected Collision One Way" -msgstr "Тільки виділити" +msgstr "Позначене одноÑпрÑмоване зіткненнÑ" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Selected Collision One Way Margin" -msgstr "Поле Ð·Ñ–Ñ‚ÐºÐ½ÐµÐ½Ð½Ñ BVH" +msgstr "Поле позначеного одноÑпрÑмованого зіткненнÑ" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Selected Navigation" @@ -14142,9 +14138,8 @@ msgid "Export templates for this platform are missing:" msgstr "Ðемає шаблонів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— платформи:" #: editor/project_export.cpp -#, fuzzy msgid "Project Export" -msgstr "ЗаÑновники проєкту" +msgstr "ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ" #: editor/project_export.cpp msgid "Manage Export Templates" @@ -16705,7 +16700,7 @@ msgstr "Копіювати вузол шлÑху" #: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp msgid "Max Call Stack" -msgstr "" +msgstr "МакÑимум Ñтеку викликів" #: modules/gdscript/gdscript.cpp msgid "Treat Warnings As Errors" @@ -16815,11 +16810,11 @@ msgstr "КількіÑÑ‚ÑŒ розÑіюваннÑ" #: modules/gltf/gltf_accessor.cpp msgid "Sparse Indices Buffer View" -msgstr "" +msgstr "ПереглÑд буфера розріджених індекÑів" #: modules/gltf/gltf_accessor.cpp msgid "Sparse Indices Byte Offset" -msgstr "" +msgstr "Байтовий зÑув розріджених індекÑів" #: modules/gltf/gltf_accessor.cpp msgid "Sparse Indices Component Type" @@ -18362,6 +18357,11 @@ msgid "The package must have at least one '.' separator." msgstr "У назві пакунка має бути принаймні один роздільник «.»." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Ðетипова збірка" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "Ðетипова збірка" @@ -18369,6 +18369,14 @@ msgstr "Ðетипова збірка" msgid "Export Format" msgstr "Формат екÑпортуваннÑ" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "Мін. SDK" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "SDK призначеннÑ" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18406,14 +18414,6 @@ msgstr "Вилучити попередньо вÑтановлене" msgid "Code" msgstr "Код" -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "Мін. SDK" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "SDK призначеннÑ" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "Пакунок" @@ -18651,15 +18651,17 @@ msgstr "" "«ВикориÑтовувати нетипову збірку»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "«СтеженнÑм за руками» можна ÑкориÑтатиÑÑ, лише Ñкщо «Режим Xr» дорівнює " "«Oculus Mobile VR» або «OpenXR»." #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "«СтеженнÑм за руками» можна ÑкориÑтатиÑÑ, лише Ñкщо «Режим Xr» дорівнює " "«OpenXR»." @@ -18671,22 +18673,45 @@ msgstr "" "нетипове збираннÑ»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Пункт «Мін. SDK» Ñ” чинним, лише Ñкщо увімкнено «ВикориÑтовувати нетипове " "збираннÑ»." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "Пункт «SDK цілі» Ñ” чинним, лише Ñкщо увімкнено «ВикориÑтовувати нетипове " "збираннÑ»." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "ВерÑÑ–Ñ Â«SDK цілі» має бути більшою або рівною за верÑÑ–ÑŽ «Мін. SDK»." #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -19029,7 +19054,7 @@ msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ñ–ÐºÑ€Ð¾Ñ„Ð¾Ð½Ð°" #: platform/iphone/export/export.cpp msgid "Photolibrary Usage Description" -msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ фотографій" +msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñвітлин" #: platform/iphone/export/export.cpp msgid "iPhone 120 X 120" @@ -19349,7 +19374,7 @@ msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ" #: platform/osx/export/export.cpp msgid "Photos Library Usage Description" -msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ фотографій" +msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñвітлин" #: platform/osx/export/export.cpp msgid "Desktop Folder Usage Description" @@ -19430,7 +19455,7 @@ msgstr "Календарі" #: platform/osx/export/export.cpp msgid "Photos Library" -msgstr "Бібліотека фотографій" +msgstr "Бібліотека Ñвітлин" #: platform/osx/export/export.cpp msgid "Apple Events" @@ -19815,7 +19840,7 @@ msgid "" "Privacy: Photo library access is enabled, but usage description is not " "specified." msgstr "" -"КонфіденційніÑÑ‚ÑŒ: увімкнено доÑтуп до бібліотеки фотографій, але Ð¾Ð¿Ð¸Ñ " +"КонфіденційніÑÑ‚ÑŒ: увімкнено доÑтуп до бібліотеки Ñвітлин, але Ð¾Ð¿Ð¸Ñ " "викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ðµ вказано." #: platform/osx/export/export.cpp @@ -20348,7 +20373,7 @@ msgstr "МаÑштаб" msgid "Custom Viewport" msgstr "1 панель переглÑду" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -21036,6 +21061,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Палітурка" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "U-відÑтань контуру" @@ -21044,6 +21074,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "МакÑ. відÑтань контуру" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Додатково" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "ÐŸÑ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21059,15 +21103,6 @@ msgstr "Віддзеркалити горизонтально" msgid "Max Speed" msgstr "МакÑ. швидкіÑÑ‚ÑŒ" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "МакÑ. відÑтань контуру" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "ÐŸÑ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾" - #: scene/2d/navigation_agent_2d.cpp #, fuzzy msgid "" @@ -24180,6 +24215,11 @@ msgid "Fold Gutter" msgstr "МіжÑтовпцевий проміжок згортаннÑ" #: scene/gui/text_edit.cpp +#, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Увімкнено позначеннÑ" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "ÐŸÑ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾" @@ -24538,18 +24578,6 @@ 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 "" -"Ð¦Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ показу не Ñ” ціллю обробки зображеннÑ. Якщо ви хочете, щоб Ñ—Ñ— вміÑÑ‚ " -"було безпоÑередньо показано на екрані, зробіть Ñ—Ñ— дочірньою Ð´Ð»Ñ Ð²ÑƒÐ·Ð»Ð° " -"Control, щоб у неї був розмір. Крім того, можна зробити Ñ—Ñ— RenderTarget Ñ– " -"пов'Ñзати Ñ—Ñ— внутрішню текÑтуру з одним із вузлів Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ." - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "" @@ -24557,6 +24585,15 @@ msgstr "" "або рівним 2 пікÑелÑм в обох вимірах." #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "ARVR" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 76cd6b6495..e1bae41d6b 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -408,6 +408,11 @@ msgstr "" msgid "Command" msgstr "کمیونٹی" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "سب سکریپشن بنائیں" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5407,6 +5412,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr ".تمام کا انتخاب" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -18373,6 +18383,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "ایکشن منتقل کریں" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18381,6 +18396,16 @@ msgstr "" msgid "Export Format" msgstr "سب سکریپشن بنائیں" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "سب سکریپشن بنائیں" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -18417,16 +18442,6 @@ msgstr "" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "سب سکریپشن بنائیں" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -18663,12 +18678,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18677,17 +18692,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20272,7 +20307,7 @@ msgstr "" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -20972,6 +21007,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "مستقل" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "ایک مینو منظر چنیں" @@ -20980,29 +21020,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "سب سکریپشن بنائیں" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "سب سکریپشن بنائیں" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "سب سکریپشن بنائیں" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -24102,6 +24147,11 @@ msgstr "" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr ".تمام کا انتخاب" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "سب سکریپشن بنائیں" @@ -24481,16 +24531,17 @@ 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 2b4093cc17..c8eae36ad6 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -412,6 +412,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "Váºt lÃ" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5492,6 +5497,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "Chá»n tất cả" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "Ngoại hình" @@ -18786,6 +18796,11 @@ msgid "The package must have at least one '.' separator." msgstr "Kà tá»± phân cách '.' phải xuất hiện Ãt nhất má»™t lần trong tên gói." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "Cắt các nút" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18794,6 +18809,16 @@ msgstr "" msgid "Export Format" msgstr "ÄÆ°á»ng dẫn xuất" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "KÃch cỡ viá»n:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "Bá» mặt mục tiêu:" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18836,16 +18861,6 @@ msgstr "Cá»a sổ trÆ°á»›c" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "KÃch cỡ viá»n:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "Bá» mặt mục tiêu:" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19092,7 +19107,7 @@ msgstr "\"Sá» dụng Bản dá»±ng tùy chỉnh\" phải được báºt để sá #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "\"Theo dõi chuyển Ä‘á»™ng tay\" chỉ dùng được khi \"Xr Mode\" là \"Oculus " @@ -19100,7 +19115,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" "\"Theo dõi chuyển Ä‘á»™ng tay\" chỉ dùng được khi \"Xr Mode\" là \"Oculus " "Mobile VR\"." @@ -19113,20 +19128,40 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Xuất AAB\" chỉ dùng được khi \"Sá» dụng Bản dá»±ng tùy chỉnh\" được báºt." #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" "\"Xuất AAB\" chỉ dùng được khi \"Sá» dụng Bản dá»±ng tùy chỉnh\" được báºt." #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20810,7 +20845,7 @@ msgstr "Phóng to" msgid "Custom Viewport" msgstr "1 Cổng xem" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21568,6 +21603,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "Äệm" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "Chá»n ô" @@ -21576,6 +21616,20 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "Nâng cao" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "Mở" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21593,15 +21647,6 @@ msgstr "Láºt Ngang" msgid "Max Speed" msgstr "Tốc Ä‘á»™:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "Mở" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -24954,6 +24999,11 @@ msgstr "ThÆ° mục:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "Chỉ chá»n" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "Mở" @@ -25358,16 +25408,17 @@ msgstr "ÄÆ°á»ng dẫn xuất" #: 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." +"The Viewport size must be greater than or equal to 2 pixels on both " +"dimensions to render anything." msgstr "" #: scene/main/viewport.cpp msgid "" -"The Viewport size must be greater than or equal to 2 pixels on both " -"dimensions to render anything." +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." msgstr "" #: scene/main/viewport.cpp diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 4a15f6acf3..976fe38138 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -89,7 +89,7 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2022-06-20 06:44+0000\n" +"PO-Revision-Date: 2022-06-30 16:42+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" @@ -466,6 +466,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (物ç†ï¼‰" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5431,6 +5436,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "ä½¿ç”¨ä¸“é—¨é¼ æ ‡æŒ‰é”®æŸ¥çœ‹åŽ†å²" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "GridMap 选择" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "外观" @@ -18065,6 +18075,11 @@ msgid "The package must have at least one '.' separator." msgstr "包必须至少有一个 “.†分隔符。" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "使用自定义构建" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "使用自定义构建" @@ -18072,6 +18087,14 @@ msgstr "使用自定义构建" msgid "Export Format" msgstr "å¯¼å‡ºæ ¼å¼" +#: platform/android/export/export_plugin.cpp +msgid "Min SDK" +msgstr "æœ€å° SDK" + +#: platform/android/export/export_plugin.cpp +msgid "Target SDK" +msgstr "ç›®æ ‡ SDK" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "架构" @@ -18108,14 +18131,6 @@ msgstr "清除上次安装" msgid "Code" msgstr "代ç " -#: platform/android/export/export_plugin.cpp -msgid "Min SDK" -msgstr "æœ€å° SDK" - -#: platform/android/export/export_plugin.cpp -msgid "Target SDK" -msgstr "ç›®æ ‡ SDK" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp msgid "Package" msgstr "包" @@ -18337,14 +18352,14 @@ msgstr "å¿…é¡»å¯ç”¨ “使用自定义构建†æ‰èƒ½ä½¿ç”¨æ’件。" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" -"“Hand Trackingâ€åªæœ‰åœ¨å½““Xr Modeâ€æ˜¯â€œOculus Mobile VrApiâ€æˆ–“OpenXRâ€æ—¶æ‰æœ‰æ•ˆã€‚" +"“Hand Trackingâ€åªæœ‰åœ¨å½““XR Modeâ€æ˜¯â€œOculus Mobile VrApiâ€æˆ–“OpenXRâ€æ—¶æ‰æœ‰æ•ˆã€‚" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." -msgstr "“Passthroughâ€åªæœ‰åœ¨å½““Xr Modeâ€æ˜¯â€œOpenXRâ€æ—¶æ‰æœ‰æ•ˆã€‚" +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." +msgstr "“Passthroughâ€åªæœ‰åœ¨å½““XR Modeâ€æ˜¯â€œOpenXRâ€æ—¶æ‰æœ‰æ•ˆã€‚" #: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." @@ -18352,18 +18367,38 @@ msgstr "“Export AABâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ•ˆã€‚" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." -msgstr "修改“Min Sdkâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ•ˆã€‚" +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "修改“Min SDKâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ•ˆã€‚" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." -msgstr "修改“Target Sdkâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ•ˆã€‚" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." -msgstr "“Target Sdkâ€ç‰ˆæœ¬å¿…须大于ç‰äºŽâ€œMin Sdkâ€ç‰ˆæœ¬ã€‚" +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "修改“Target SDKâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ•ˆã€‚" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." +msgstr "“Target SDKâ€ç‰ˆæœ¬å¿…须大于ç‰äºŽâ€œMin SDKâ€ç‰ˆæœ¬ã€‚" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp @@ -19894,7 +19929,7 @@ msgstr "缩放" msgid "Custom Viewport" msgstr "自定义视区" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp msgid "Process Mode" @@ -20567,17 +20602,36 @@ msgid "" "will be removed in a future version. Use 'Navigation2DServer.map_get_path()' " "instead." msgstr "" +"“Navigation2Dâ€èŠ‚点和“Navigation2D.get_simple_path()â€å·²åºŸå¼ƒï¼Œä¼šåœ¨å°†æ¥çš„版本ä¸" +"移除。请用“Navigation2DServer.map_get_path()â€æ›¿ä»£ã€‚" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "绑定" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Path Desired Distance" -msgstr "ç›®æ ‡æœŸæœ›è·ç¦»" +msgstr "路径期望è·ç¦»" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Target Desired Distance" msgstr "ç›®æ ‡æœŸæœ›è·ç¦»" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Path Max Distance" +msgstr "路径最大è·ç¦»" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "高级" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Avoidance Enabled" +msgstr "å¯ç”¨é¿éšœ" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "邻接è·ç¦»" @@ -20593,14 +20647,6 @@ msgstr "时间下é™" msgid "Max Speed" msgstr "最大速度" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" -msgstr "路径最大è·ç¦»" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Avoidance Enabled" -msgstr "å¯ç”¨é¿éšœ" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -21699,6 +21745,8 @@ msgid "" "be removed in a future version. Use 'NavigationServer.map_get_path()' " "instead." msgstr "" +"“Navigationâ€èŠ‚点和“Navigation.get_simple_path()â€å·²åºŸå¼ƒï¼Œä¼šåœ¨å°†æ¥çš„版本ä¸ç§»" +"除。请用“NavigationServer.map_get_path()â€æ›¿ä»£ã€‚" #: scene/3d/navigation.cpp scene/resources/curve.cpp msgid "Up Vector" @@ -23603,6 +23651,11 @@ msgid "Fold Gutter" msgstr "折å æ " #: scene/gui/text_edit.cpp +#, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "å¯ç”¨é€‰æ‹©" + +#: scene/gui/text_edit.cpp msgid "Hiding Enabled" msgstr "å¯ç”¨éšè—" @@ -23959,22 +24012,20 @@ msgstr "Viewport 路径" #: 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 "" -"è¿™ä¸ªè§†çª—æœªè¢«è®¾ç½®ä¸ºæ¸²æŸ“ç›®æ ‡ã€‚å¦‚æžœä½ æƒ³è®©å…¶ç›´æŽ¥åœ¨å±å¹•ä¸Šæ˜¾ç¤ºå†…容,请使其æˆä¸º " -"Control çš„åèŠ‚ç‚¹ï¼Œè¿™æ ·ä¸€æ¥è¯¥ Viewport æ‰ä¼šæœ‰å¤§å°ã€‚å¦åˆ™è¯·ä¸ºå…¶è®¾ç½® " -"RenderTarget 并分é…其内部纹ç†æ¥æ˜¾ç¤ºã€‚" - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "Viewport 的宽高都大于ç‰äºŽ 2 åƒç´ æ—¶æ‰èƒ½è¿›è¡Œæ¸²æŸ“。" #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "ARVR" @@ -25482,14 +25533,12 @@ msgid "Walkable Low Height Spans" msgstr "å¯è¡Œèµ°ä½Žé«˜åº¦èŒƒå›´" #: scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Baking AABB" -msgstr "æ£åœ¨ç”Ÿæˆ AABB" +msgstr "烘焙 AABB" #: scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Baking AABB Offset" -msgstr "基础å移" +msgstr "烘焙 AABB å移" #: scene/resources/occluder_shape.cpp msgid "Spheres" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 114f6b0a45..201811d543 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -417,6 +417,11 @@ msgstr "" msgid "Command" msgstr "社群" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr "物ç†å¹€ %" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5663,6 +5668,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "刪除é¸ä¸æª”案" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "" @@ -19119,6 +19129,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "貼上" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -19127,6 +19142,16 @@ msgstr "" msgid "Export Format" msgstr "匯出" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "下一個腳本" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "目標" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp msgid "Architectures" msgstr "" @@ -19165,16 +19190,6 @@ msgstr "上一個tab" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "下一個腳本" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "目標" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19419,12 +19434,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19433,17 +19448,37 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -21095,7 +21130,7 @@ msgstr "放大" msgid "Custom Viewport" msgstr "" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21810,6 +21845,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "貼上動畫" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "é¸æ“‡ä¸»å ´æ™¯" @@ -21818,29 +21858,34 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Neighbor Dist" +msgid "Path Max Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Neighbors" -msgstr "" +#, fuzzy +msgid "Avoidance" +msgstr "進階" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Time Horizon" +#, fuzzy +msgid "Avoidance Enabled" +msgstr "啟用" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +msgid "Neighbor Dist" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Max Speed" +msgid "Max Neighbors" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -msgid "Path Max Distance" +msgid "Time Horizon" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "啟用" +msgid "Max Speed" +msgstr "" #: scene/2d/navigation_agent_2d.cpp msgid "" @@ -25061,6 +25106,11 @@ msgstr "資料夾:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "åªé™é¸ä¸" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "啟用" @@ -25454,14 +25504,6 @@ msgid "Viewport Path" 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 #, fuzzy msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " @@ -25469,6 +25511,15 @@ msgid "" msgstr "viewport大å°å¿…é ˆå¤§æ–¼ï¼ä»¥æ¸²æŸ“任何æ±è¥¿ã€‚" #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index bcf6650997..9021c16fc8 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -434,6 +434,11 @@ msgstr "Meta" msgid "Command" msgstr "Command" +#: core/os/input_event.cpp +#, fuzzy +msgid "Physical" +msgstr " (物ç†ï¼‰" + #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp @@ -5585,6 +5590,11 @@ msgid "Mouse Extra Buttons Navigate History" msgstr "æ»‘é¼ é¡å¤–按éµæ“作æ·å²ç´€éŒ„" #: editor/editor_settings.cpp +#, fuzzy +msgid "Drag And Drop Selection" +msgstr "é¸æ“‡ç¶²æ ¼åœ°åœ–" + +#: editor/editor_settings.cpp msgid "Appearance" msgstr "外觀" @@ -18704,6 +18714,11 @@ msgid "The package must have at least one '.' separator." msgstr "å¥—ä»¶å¿…é ˆè‡³å°‘æœ‰ä¸€å€‹ã€Œ.ã€åˆ†éš”å—元。" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Custom Build" +msgstr "剪下節點" + +#: platform/android/export/export_plugin.cpp msgid "Use Custom Build" msgstr "" @@ -18712,6 +18727,16 @@ msgstr "" msgid "Export Format" msgstr "匯出路徑" +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Min SDK" +msgstr "輪廓尺寸:" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Target SDK" +msgstr "目標" + #: platform/android/export/export_plugin.cpp platform/iphone/export/export.cpp #, fuzzy msgid "Architectures" @@ -18754,16 +18779,6 @@ msgstr "åµæŸ¥å‰ä¸€å€‹å¯¦é«”" msgid "Code" msgstr "" -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Min SDK" -msgstr "輪廓尺寸:" - -#: platform/android/export/export_plugin.cpp -#, fuzzy -msgid "Target SDK" -msgstr "目標" - #: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Package" @@ -19003,15 +19018,17 @@ msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "「使用自定建置ã€å¿…é ˆå•Ÿç”¨ä»¥ä½¿ç”¨æœ¬å¤–æŽ›ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" " +"\"Hand Tracking\" is only valid when \"XR Mode\" is \"Oculus Mobile VrApi\" " "or \"OpenXR\"." msgstr "" "「Hand Trackingã€ï¼ˆæ‰‹éƒ¨è¿½è¹¤ï¼‰åƒ…å¯åœ¨ã€ŒXr Modeã€ï¼ˆXR 模å¼ï¼‰è¨ç‚ºã€ŒOculus Mobile " "VRã€æˆ–「OpenXRã€æ™‚å¯ç”¨ã€‚" #: platform/android/export/export_plugin.cpp -msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"." +#, fuzzy +msgid "\"Passthrough\" is only valid when \"XR Mode\" is \"OpenXR\"." msgstr "「Passthroughã€åƒ…å¯åœ¨ã€ŒXr Modeã€ï¼ˆXR 模å¼ï¼‰è¨ç‚ºã€ŒOpenXRã€æ™‚å¯ç”¨ã€‚" #: platform/android/export/export_plugin.cpp @@ -19019,18 +19036,41 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "「Export AABã€åƒ…於「Use Custom Buildã€å•Ÿç”¨æ™‚å¯ç”¨ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled." +"\"Min SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "å°ã€ŒMin Sdkã€çš„修改僅在「Use Custom Buildã€å•Ÿç”¨æ™‚有效。" #: platform/android/export/export_plugin.cpp +msgid "\"Min SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "" -"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is " -"enabled." +"\"Min SDK\" cannot be lower than %d, which is the version needed by the " +"Godot library." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "" +"\"Target SDK\" can only be overridden when \"Use Custom Build\" is enabled." msgstr "å°ã€ŒTarget Sdkã€çš„修改僅於「Use Custom Buildã€å•Ÿç”¨æ™‚有效。" #: platform/android/export/export_plugin.cpp -msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." +msgid "" +"\"Target SDK\" should be a valid integer, but got \"%s\" which is invalid." +msgstr "" + +#: platform/android/export/export_plugin.cpp +msgid "" +"\"Target SDK\" %d is higher than the default version %d. This may work, but " +"wasn't tested and may be unstable." +msgstr "" + +#: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "\"Target SDK\" version must be greater or equal to \"Min SDK\" version." msgstr "「Target Sdkã€ç‰ˆæœ¬å¿…é ˆé«˜æ–¼æˆ–äºŽã€ŒMin Sdkã€ç‰ˆæœ¬ä¸€è‡´ã€‚" #: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp @@ -20711,7 +20751,7 @@ msgstr "放大" msgid "Custom Viewport" msgstr "1 個檢視å€" -#: scene/2d/camera_2d.cpp scene/3d/camera.cpp +#: scene/2d/camera_2d.cpp scene/3d/camera.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp #: scene/animation/animation_tree_player.cpp scene/main/timer.cpp #, fuzzy @@ -21472,6 +21512,11 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy +msgid "Pathfinding" +msgstr "ç¶å®š" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy msgid "Path Desired Distance" msgstr "é¸æ“‡è·é›¢ï¼š" @@ -21480,6 +21525,21 @@ msgid "Target Desired Distance" msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Path Max Distance" +msgstr "é¸æ“‡è·é›¢ï¼š" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance" +msgstr "進階" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp +#, fuzzy +msgid "Avoidance Enabled" +msgstr "啟用" + +#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Neighbor Dist" msgstr "" @@ -21497,16 +21557,6 @@ msgstr "水平翻轉" msgid "Max Speed" msgstr "速度:" -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Path Max Distance" -msgstr "é¸æ“‡è·é›¢ï¼š" - -#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy -msgid "Avoidance Enabled" -msgstr "啟用" - #: scene/2d/navigation_agent_2d.cpp msgid "" "The NavigationAgent2D can be used only under a Node2D inheriting parent node." @@ -24903,6 +24953,11 @@ msgstr "資料夾:" #: scene/gui/text_edit.cpp #, fuzzy +msgid "Drag And Drop Selection Enabled" +msgstr "僅æœå°‹æ‰€é¸å€åŸŸ" + +#: scene/gui/text_edit.cpp +#, fuzzy msgid "Hiding Enabled" msgstr "啟用" @@ -25313,22 +25368,20 @@ 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 "" -"該 Viewport 尚未被è¨å®šç‚ºç®—ç¹ªç›®æ¨™ã€‚è‹¥ä½ æƒ³ç›´æŽ¥å°‡å…¶å…§å®¹é¡¯ç¤ºæ–¼ç•«é¢ä¸Šï¼Œè«‹å°‡å…¶è¨ç‚º " -"Control çš„å節點以讓其å–得大å°ã€‚å¦å‰‡è«‹å°‡å…¶è¨ç‚º RenderTarget 並指派其內部紋ç†" -"為其他節點以顯示。" - -#: scene/main/viewport.cpp -msgid "" "The Viewport size must be greater than or equal to 2 pixels on both " "dimensions to render anything." msgstr "Viewporté•·èˆ‡å¯¬å¿…é ˆçš†å¤§æ–¼æˆ–ç‰æ–¼2åƒç´ æ‰å¯é€²è¡Œç®—繪。" #: scene/main/viewport.cpp +msgid "" +"This Viewport has HDR enabled, but its Usage is set to 2D or 2D No-" +"Sampling.\n" +"HDR is only supported in Viewports that have their Usage set to 3D or 3D No-" +"Effects.\n" +"HDR will be disabled for this Viewport." +msgstr "" + +#: scene/main/viewport.cpp msgid "ARVR" msgstr "" diff --git a/modules/gdscript/doc_classes/@GDScript.xml b/modules/gdscript/doc_classes/@GDScript.xml index 70151c4d21..e672ea6454 100644 --- a/modules/gdscript/doc_classes/@GDScript.xml +++ b/modules/gdscript/doc_classes/@GDScript.xml @@ -257,4 +257,145 @@ [b]Note:[/b] "Not a Number" is only a concept with floating-point numbers, and has no equivalent for integers. Dividing an integer [code]0[/code] by [code]0[/code] will not result in [constant NAN] and will result in a run-time error instead. </constant> </constants> + <annotations> + <annotation name="@export"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_color_no_alpha"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_dir"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_enum" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="names" type="String" /> + <description> + </description> + </annotation> + <annotation name="@export_exp_easing"> + <return type="void" /> + <argument index="0" name="hint1" type="String" default="null" /> + <argument index="1" name="hint2" type="String" default="null" /> + <description> + </description> + </annotation> + <annotation name="@export_file" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="filter" type="String" default="null" /> + <description> + </description> + </annotation> + <annotation name="@export_flags" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="names" type="String" /> + <description> + </description> + </annotation> + <annotation name="@export_flags_2d_navigation"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_flags_2d_physics"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_flags_2d_render"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_flags_3d_navigation"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_flags_3d_physics"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_flags_3d_render"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_global_dir"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_global_file" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="filter" type="String" default="null" /> + <description> + </description> + </annotation> + <annotation name="@export_multiline"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_node_path" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="type" type="String" default="null" /> + <description> + </description> + </annotation> + <annotation name="@export_placeholder"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@export_range"> + <return type="void" /> + <argument index="0" name="min" type="float" /> + <argument index="1" name="max" type="float" /> + <argument index="2" name="step" type="float" default="null" /> + <argument index="3" name="slider1" type="String" default="null" /> + <argument index="4" name="slider2" type="String" default="null" /> + <argument index="5" name="slider3" type="String" default="null" /> + <description> + </description> + </annotation> + <annotation name="@icon"> + <return type="void" /> + <argument index="0" name="icon_path" type="String" /> + <description> + </description> + </annotation> + <annotation name="@onready"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@rpc" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="mode" type="String" default="null" /> + <argument index="1" name="sync" type="String" default="null" /> + <argument index="2" name="transfer_mode" type="String" default="null" /> + <argument index="3" name="transfer_channel" type="int" default="null" /> + <description> + </description> + </annotation> + <annotation name="@tool"> + <return type="void" /> + <description> + </description> + </annotation> + <annotation name="@warning_ignore" qualifiers="vararg"> + <return type="void" /> + <argument index="0" name="warning" type="String" /> + <description> + </description> + </annotation> + </annotations> </class> diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index feb0a237df..e9a206f48b 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -489,6 +489,7 @@ public: virtual void get_public_functions(List<MethodInfo> *p_functions) const override; virtual void get_public_constants(List<Pair<String, Variant>> *p_constants) const override; + virtual void get_public_annotations(List<MethodInfo> *p_annotations) const override; virtual void profiling_start() override; virtual void profiling_stop() override; diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index dc454e3bc2..8b4c245bf6 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -860,6 +860,9 @@ void GDScriptAnalyzer::resolve_class_interface(GDScriptParser::ClassNode *p_clas case GDScriptParser::ClassNode::Member::CLASS: check_class_member_name_conflict(p_class, member.m_class->identifier->name, member.m_class); break; + case GDScriptParser::ClassNode::Member::GROUP: + // No-op, but needed to silence warnings. + break; case GDScriptParser::ClassNode::Member::UNDEFINED: ERR_PRINT("Trying to resolve undefined member."); break; diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index 6055d3df33..af8e4b3746 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -2452,6 +2452,25 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar } #endif } break; + + case GDScriptParser::ClassNode::Member::GROUP: { + const GDScriptParser::AnnotationNode *annotation = member.annotation; + StringName name = annotation->export_info.name; + + // This is not a normal member, but we need this to keep indices in order. + GDScript::MemberInfo minfo; + minfo.index = p_script->member_indices.size(); + + PropertyInfo prop_info; + prop_info.name = name; + prop_info.usage = annotation->export_info.usage; + prop_info.hint_string = annotation->export_info.hint_string; + + p_script->member_info[name] = prop_info; + p_script->member_indices[name] = minfo; + p_script->members.insert(name); + } break; + default: break; // Nothing to do here. } diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 404fcc1ea7..c33824c8a6 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -445,6 +445,16 @@ void GDScriptLanguage::get_public_constants(List<Pair<String, Variant>> *p_const p_constants->push_back(nan); } +void GDScriptLanguage::get_public_annotations(List<MethodInfo> *p_annotations) const { + GDScriptParser parser; + List<MethodInfo> annotations; + parser.get_annotation_list(&annotations); + + for (const MethodInfo &E : annotations) { + p_annotations->push_back(E); + } +} + String GDScriptLanguage::make_function(const String &p_class, const String &p_name, const PackedStringArray &p_args) const { #ifdef TOOLS_ENABLED bool th = EditorSettings::get_singleton()->get_setting("text_editor/completion/add_type_hints"); @@ -569,7 +579,7 @@ static int _get_enum_constant_location(StringName p_class, StringName p_enum_con // END LOCATION METHODS static String _get_visual_datatype(const PropertyInfo &p_info, bool p_is_arg = true) { - if (p_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (p_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { String enum_name = p_info.class_name; if (!enum_name.contains(".")) { return enum_name; @@ -950,6 +960,8 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class, } option = ScriptLanguage::CodeCompletionOption(member.signal->identifier->name, ScriptLanguage::CODE_COMPLETION_KIND_SIGNAL, location); break; + case GDScriptParser::ClassNode::Member::GROUP: + break; // No-op, but silences warnings. case GDScriptParser::ClassNode::Member::UNDEFINED: break; } @@ -1292,7 +1304,7 @@ static GDScriptCompletionIdentifier _type_from_property(const PropertyInfo &p_pr return ci; } - if (p_property.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (p_property.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { ci.enumeration = p_property.class_name; } @@ -2082,6 +2094,8 @@ static bool _guess_identifier_type_from_base(GDScriptParser::CompletionContext & r_type.type.kind = GDScriptParser::DataType::CLASS; r_type.type.class_type = member.m_class; return true; + case GDScriptParser::ClassNode::Member::GROUP: + return false; // No-op, but silences warnings. case GDScriptParser::ClassNode::Member::UNDEFINED: return false; // Unreachable. } @@ -2407,7 +2421,7 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c if (p_argidx < method_args) { PropertyInfo arg_info = info.arguments[p_argidx]; - if (arg_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (arg_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { _find_enumeration_candidates(p_context, arg_info.class_name, r_result); } } @@ -3376,6 +3390,15 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co return OK; } } break; + case GDScriptParser::COMPLETION_ANNOTATION: { + const String annotation_symbol = "@" + p_symbol; + if (parser.annotation_exists(annotation_symbol)) { + r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_ANNOTATION; + r_result.class_name = "@GDScript"; + r_result.class_member = annotation_symbol; + return OK; + } + } break; default: { } } diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index ca430b0f72..11fa7575d8 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -105,6 +105,10 @@ void GDScriptParser::get_annotation_list(List<MethodInfo> *r_annotations) const } } +bool GDScriptParser::annotation_exists(const String &p_annotation_name) const { + return valid_annotations.has(p_annotation_name); +} + GDScriptParser::GDScriptParser() { // Register valid annotations. // TODO: Should this be static? @@ -131,6 +135,11 @@ GDScriptParser::GDScriptParser() { register_annotation(MethodInfo("@export_flags_3d_render"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_RENDER, Variant::INT>); register_annotation(MethodInfo("@export_flags_3d_physics"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_PHYSICS, Variant::INT>); register_annotation(MethodInfo("@export_flags_3d_navigation"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_NAVIGATION, Variant::INT>); + // Export grouping annotations. + register_annotation(MethodInfo("@export_category", PropertyInfo(Variant::STRING, "name")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_CATEGORY>); + register_annotation(MethodInfo("@export_group", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::STRING, "prefix")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_GROUP>, 1); + register_annotation(MethodInfo("@export_subgroup", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::STRING, "prefix")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_SUBGROUP>, 1); + // Warning annotations. register_annotation(MethodInfo("@warning_ignore", PropertyInfo(Variant::STRING, "warning")), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, 0, true); // Networking. register_annotation(MethodInfo("@rpc", PropertyInfo(Variant::STRING, "mode"), PropertyInfo(Variant::STRING, "sync"), PropertyInfo(Variant::STRING, "transfer_mode"), PropertyInfo(Variant::INT, "transfer_channel")), AnnotationInfo::FUNCTION, &GDScriptParser::network_annotations<Multiplayer::RPC_MODE_AUTHORITY>, 4, true); @@ -519,9 +528,13 @@ void GDScriptParser::parse_program() { head = alloc_node<ClassNode>(); current_class = head; + // If we happen to parse an annotation before extends or class_name keywords, track it. + // @tool is allowed, but others should fail. + AnnotationNode *premature_annotation = nullptr; + if (match(GDScriptTokenizer::Token::ANNOTATION)) { - // Check for @tool annotation. - AnnotationNode *annotation = parse_annotation(AnnotationInfo::SCRIPT | AnnotationInfo::CLASS_LEVEL); + // Check for @tool, script-level, or standalone annotation. + AnnotationNode *annotation = parse_annotation(AnnotationInfo::SCRIPT | AnnotationInfo::STANDALONE | AnnotationInfo::CLASS_LEVEL); if (annotation != nullptr) { if (annotation->name == SNAME("@tool")) { // TODO: don't allow @tool anywhere else. (Should all script annotations be the first thing?). @@ -531,7 +544,14 @@ void GDScriptParser::parse_program() { } // @tool annotation has no specific target. annotation->apply(this, nullptr); + } else if (annotation->applies_to(AnnotationInfo::SCRIPT | AnnotationInfo::STANDALONE)) { + premature_annotation = annotation; + if (previous.type != GDScriptTokenizer::Token::NEWLINE) { + push_error(R"(Expected newline after a standalone annotation.)"); + } + annotation->apply(this, head); } else { + premature_annotation = annotation; annotation_stack.push_back(annotation); } } @@ -541,8 +561,8 @@ void GDScriptParser::parse_program() { // Order here doesn't matter, but there should be only one of each at most. switch (current.type) { case GDScriptTokenizer::Token::CLASS_NAME: - if (!annotation_stack.is_empty()) { - push_error(R"("class_name" should be used before annotations.)"); + if (premature_annotation != nullptr) { + push_error(R"("class_name" should be used before annotations (except @tool).)"); } advance(); if (head->identifier != nullptr) { @@ -552,8 +572,8 @@ void GDScriptParser::parse_program() { } break; case GDScriptTokenizer::Token::EXTENDS: - if (!annotation_stack.is_empty()) { - push_error(R"("extends" should be used before annotations.)"); + if (premature_annotation != nullptr) { + push_error(R"("extends" should be used before annotations (except @tool).)"); } advance(); if (head->extends_used) { @@ -574,12 +594,12 @@ void GDScriptParser::parse_program() { } if (match(GDScriptTokenizer::Token::ANNOTATION)) { - // Check for @icon annotation. - AnnotationNode *annotation = parse_annotation(AnnotationInfo::SCRIPT | AnnotationInfo::CLASS_LEVEL); + // Check for a script-level, or standalone annotation. + AnnotationNode *annotation = parse_annotation(AnnotationInfo::SCRIPT | AnnotationInfo::STANDALONE | AnnotationInfo::CLASS_LEVEL); if (annotation != nullptr) { - if (annotation->name == SNAME("@icon")) { + if (annotation->applies_to(AnnotationInfo::SCRIPT | AnnotationInfo::STANDALONE)) { if (previous.type != GDScriptTokenizer::Token::NEWLINE) { - push_error(R"(Expected newline after "@icon" annotation.)"); + push_error(R"(Expected newline after a standalone annotation.)"); } annotation->apply(this, head); } else { @@ -807,9 +827,18 @@ void GDScriptParser::parse_class_body(bool p_is_multiline) { break; case GDScriptTokenizer::Token::ANNOTATION: { advance(); - AnnotationNode *annotation = parse_annotation(AnnotationInfo::CLASS_LEVEL); + + // Check for class-level annotations. + AnnotationNode *annotation = parse_annotation(AnnotationInfo::STANDALONE | AnnotationInfo::CLASS_LEVEL); if (annotation != nullptr) { - annotation_stack.push_back(annotation); + if (annotation->applies_to(AnnotationInfo::STANDALONE)) { + if (previous.type != GDScriptTokenizer::Token::NEWLINE) { + push_error(R"(Expected newline after a standalone annotation.)"); + } + annotation->apply(this, head); + } else { + annotation_stack.push_back(annotation); + } } break; } @@ -3662,6 +3691,36 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node return true; } +template <PropertyUsageFlags t_usage> +bool GDScriptParser::export_group_annotations(const AnnotationNode *p_annotation, Node *p_node) { + AnnotationNode *annotation = const_cast<AnnotationNode *>(p_annotation); + + annotation->export_info.name = annotation->resolved_arguments[0]; + + switch (t_usage) { + case PROPERTY_USAGE_CATEGORY: { + annotation->export_info.usage = t_usage; + } break; + + case PROPERTY_USAGE_GROUP: { + annotation->export_info.usage = t_usage; + if (annotation->resolved_arguments.size() == 2) { + annotation->export_info.hint_string = annotation->resolved_arguments[1]; + } + } break; + + case PROPERTY_USAGE_SUBGROUP: { + annotation->export_info.usage = t_usage; + if (annotation->resolved_arguments.size() == 2) { + annotation->export_info.hint_string = annotation->resolved_arguments[1]; + } + } break; + } + + current_class->add_member_group(annotation); + return true; +} + bool GDScriptParser::warning_annotations(const AnnotationNode *p_annotation, Node *p_node) { #ifdef DEBUG_ENABLED bool has_error = false; @@ -4145,6 +4204,8 @@ void GDScriptParser::TreePrinter::print_class(ClassNode *p_class) { break; case ClassNode::Member::ENUM_VALUE: break; // Nothing. Will be printed by enum. + case ClassNode::Member::GROUP: + break; // Nothing. Groups are only used by inspector. case ClassNode::Member::UNDEFINED: push_line("<unknown member>"); break; diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h index e3f8d4b8ba..8d3295f25b 100644 --- a/modules/gdscript/gdscript_parser.h +++ b/modules/gdscript/gdscript_parser.h @@ -325,6 +325,7 @@ public: Vector<Variant> resolved_arguments; AnnotationInfo *info = nullptr; + PropertyInfo export_info; bool apply(GDScriptParser *p_this, Node *p_target) const; bool applies_to(uint32_t p_target_kinds) const; @@ -500,6 +501,7 @@ public: VARIABLE, ENUM, ENUM_VALUE, // For unnamed enums. + GROUP, // For member grouping. }; Type type = UNDEFINED; @@ -511,6 +513,7 @@ public: SignalNode *signal; VariableNode *variable; EnumNode *m_enum; + AnnotationNode *annotation; }; EnumNode::Value enum_value; @@ -532,6 +535,8 @@ public: return "enum"; case ENUM_VALUE: return "enum value"; + case GROUP: + return "group"; } return ""; } @@ -552,6 +557,8 @@ public: return m_enum->start_line; case SIGNAL: return signal->start_line; + case GROUP: + return annotation->start_line; case UNDEFINED: ERR_FAIL_V_MSG(-1, "Reaching undefined member type."); } @@ -586,6 +593,9 @@ public: // TODO: Add parameter info. return type; } + case GROUP: { + return DataType(); + } case UNDEFINED: return DataType(); } @@ -622,6 +632,10 @@ public: type = ENUM_VALUE; enum_value = p_enum_value; } + Member(AnnotationNode *p_annotation) { + type = GROUP; + annotation = p_annotation; + } }; IdentifierNode *identifier = nullptr; @@ -668,6 +682,10 @@ public: members_indices[p_enum_value.identifier->name] = members.size(); members.push_back(Member(p_enum_value)); } + void add_member_group(AnnotationNode *p_annotation_node) { + members_indices[p_annotation_node->export_info.name] = members.size(); + members.push_back(Member(p_annotation_node)); + } ClassNode() { type = CLASS; @@ -1238,6 +1256,7 @@ private: SIGNAL = 1 << 4, FUNCTION = 1 << 5, STATEMENT = 1 << 6, + STANDALONE = 1 << 7, CLASS_LEVEL = CLASS | VARIABLE | FUNCTION, }; uint32_t target_kind = 0; // Flags. @@ -1348,6 +1367,8 @@ private: bool onready_annotation(const AnnotationNode *p_annotation, Node *p_target); template <PropertyHint t_hint, Variant::Type t_type> bool export_annotations(const AnnotationNode *p_annotation, Node *p_target); + template <PropertyUsageFlags t_usage> + bool export_group_annotations(const AnnotationNode *p_annotation, Node *p_target); bool warning_annotations(const AnnotationNode *p_annotation, Node *p_target); template <Multiplayer::RPCMode t_mode> bool network_annotations(const AnnotationNode *p_annotation, Node *p_target); @@ -1413,6 +1434,7 @@ public: CompletionContext get_completion_context() const { return completion_context; } CompletionCall get_completion_call() const { return completion_call; } void get_annotation_list(List<MethodInfo> *r_annotations) const; + bool annotation_exists(const String &p_annotation_name) const; const List<ParserError> &get_errors() const { return errors; } const List<String> get_dependencies() const { diff --git a/modules/gdscript/language_server/gdscript_extend_parser.cpp b/modules/gdscript/language_server/gdscript_extend_parser.cpp index d3c5fed95a..03e93821c7 100644 --- a/modules/gdscript/language_server/gdscript_extend_parser.cpp +++ b/modules/gdscript/language_server/gdscript_extend_parser.cpp @@ -307,6 +307,8 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p parse_class_symbol(m.m_class, symbol); r_symbol.children.push_back(symbol); } break; + case ClassNode::Member::GROUP: + break; // No-op, but silences warnings. case ClassNode::Member::UNDEFINED: break; // Unreachable. } @@ -815,6 +817,8 @@ Dictionary ExtendGDScriptParser::dump_class_api(const GDScriptParser::ClassNode methods.append(dump_function_api(m.function)); } } break; + case ClassNode::Member::GROUP: + break; // No-op, but silences warnings. case ClassNode::Member::UNDEFINED: break; // Unreachable. } diff --git a/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.gd b/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.gd index d13d713454..ada6030132 100644 --- a/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.gd +++ b/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.gd @@ -1,6 +1,6 @@ -# Error here. `class_name` should be used *before* annotations, not after. +# Error here. `class_name` should be used *before* annotations, not after (except @tool). @icon("res://path/to/optional/icon.svg") class_name HelloWorld func test(): - pass + pass diff --git a/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.out b/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.out index 0bcc8acc55..02b33c8692 100644 --- a/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.out +++ b/modules/gdscript/tests/scripts/parser/errors/class_name_after_annotation.out @@ -1,2 +1,2 @@ GDTEST_PARSER_ERROR -"class_name" should be used before annotations. +"class_name" should be used before annotations (except @tool). diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index 36d985eff3..e8036098cb 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -5176,19 +5176,16 @@ Node3D *GLTFDocument::_generate_light(Ref<GLTFState> state, const GLTFNodeIndex } const float range = CLAMP(l->range, 0, 4096); - // Doubling the range will double the effective brightness, so we need double attenuation (half brightness). - // We want to have double intensity give double brightness, so we need half the attenuation. - const float attenuation = range / (intensity * 2048); if (l->light_type == "point") { OmniLight3D *light = memnew(OmniLight3D); - light->set_param(OmniLight3D::PARAM_ATTENUATION, attenuation); + light->set_param(OmniLight3D::PARAM_ENERGY, intensity); light->set_param(OmniLight3D::PARAM_RANGE, range); light->set_color(l->color); return light; } if (l->light_type == "spot") { SpotLight3D *light = memnew(SpotLight3D); - light->set_param(SpotLight3D::PARAM_ATTENUATION, attenuation); + light->set_param(SpotLight3D::PARAM_ENERGY, intensity); light->set_param(SpotLight3D::PARAM_RANGE, range); light->set_param(SpotLight3D::PARAM_SPOT_ANGLE, Math::rad2deg(l->outer_cone_angle)); light->set_color(l->color); @@ -5253,14 +5250,12 @@ GLTFLightIndex GLTFDocument::_convert_light(Ref<GLTFState> state, Light3D *p_lig l->light_type = "point"; OmniLight3D *light = cast_to<OmniLight3D>(p_light); l->range = light->get_param(OmniLight3D::PARAM_RANGE); - float attenuation = p_light->get_param(OmniLight3D::PARAM_ATTENUATION); - l->intensity = l->range / (attenuation * 2048); + l->intensity = light->get_param(OmniLight3D::PARAM_ENERGY); } else if (cast_to<SpotLight3D>(p_light)) { l->light_type = "spot"; SpotLight3D *light = cast_to<SpotLight3D>(p_light); l->range = light->get_param(SpotLight3D::PARAM_RANGE); - float attenuation = light->get_param(SpotLight3D::PARAM_ATTENUATION); - l->intensity = l->range / (attenuation * 2048); + l->intensity = light->get_param(SpotLight3D::PARAM_ENERGY); l->outer_cone_angle = Math::deg2rad(light->get_param(SpotLight3D::PARAM_SPOT_ANGLE)); // This equation is the inverse of the import equation (which has a desmos link). diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 69bd8703aa..91b14ba108 100644 --- a/modules/mono/csharp_script.h +++ b/modules/mono/csharp_script.h @@ -502,6 +502,7 @@ public: /* TODO? */ void get_public_functions(List<MethodInfo> *p_functions) const override {} /* TODO? */ void get_public_constants(List<Pair<String, Variant>> *p_constants) const override {} + /* TODO? */ void get_public_annotations(List<MethodInfo> *p_annotations) const override {} void reload_all_scripts() override; void reload_tool_script(const Ref<Script> &p_script, bool p_soft_reload) override; diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp index 9d3d481068..4ee774c3bd 100644 --- a/modules/mono/editor/bindings_generator.cpp +++ b/modules/mono/editor/bindings_generator.cpp @@ -2865,7 +2865,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { " We only expected Object.free, but found '" + itype.name + "." + imethod.name + "'."); } - } else if (return_info.type == Variant::INT && return_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + } else if (return_info.type == Variant::INT && return_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { imethod.return_type.cname = return_info.class_name; imethod.return_type.is_enum = true; } else if (return_info.class_name != StringName()) { @@ -2903,7 +2903,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { ArgumentInterface iarg; iarg.name = orig_arg_name; - if (arginfo.type == Variant::INT && arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (arginfo.type == Variant::INT && arginfo.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { iarg.type.cname = arginfo.class_name; iarg.type.is_enum = true; } else if (arginfo.class_name != StringName()) { @@ -3011,7 +3011,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { ArgumentInterface iarg; iarg.name = orig_arg_name; - if (arginfo.type == Variant::INT && arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (arginfo.type == Variant::INT && arginfo.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { iarg.type.cname = arginfo.class_name; iarg.type.is_enum = true; } else if (arginfo.class_name != StringName()) { @@ -3075,9 +3075,9 @@ bool BindingsGenerator::_populate_object_type_interfaces() { List<String> constants; ClassDB::get_integer_constant_list(type_cname, &constants, true); - const HashMap<StringName, List<StringName>> &enum_map = class_info->enum_map; + const HashMap<StringName, ClassDB::ClassInfo::EnumInfo> &enum_map = class_info->enum_map; - for (const KeyValue<StringName, List<StringName>> &E : enum_map) { + for (const KeyValue<StringName, ClassDB::ClassInfo::EnumInfo> &E : enum_map) { StringName enum_proxy_cname = E.key; String enum_proxy_name = enum_proxy_cname.operator String(); if (itype.find_property_by_proxy_name(enum_proxy_cname)) { @@ -3087,7 +3087,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { enum_proxy_cname = StringName(enum_proxy_name); } EnumInterface ienum(enum_proxy_cname); - const List<StringName> &enum_constants = E.value; + const List<StringName> &enum_constants = E.value.constants; for (const StringName &constant_cname : enum_constants) { String constant_name = constant_cname.operator String(); int64_t *value = class_info->constant_map.getptr(constant_cname); diff --git a/modules/openxr/extensions/openxr_vulkan_extension.cpp b/modules/openxr/extensions/openxr_vulkan_extension.cpp index 2ddf3b8a7d..3d3d4de5b6 100644 --- a/modules/openxr/extensions/openxr_vulkan_extension.cpp +++ b/modules/openxr/extensions/openxr_vulkan_extension.cpp @@ -34,7 +34,6 @@ #include "../openxr_api.h" #include "../openxr_util.h" #include "servers/rendering/renderer_rd/effects/copy_effects.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" #include "servers/rendering/rendering_server_globals.h" #include "servers/rendering_server.h" @@ -439,7 +438,6 @@ bool OpenXRVulkanExtension::copy_render_target_to_image(RID p_from_render_target SwapchainGraphicsData *data = (SwapchainGraphicsData *)p_swapchain_graphics_data; ERR_FAIL_NULL_V(data, false); ERR_FAIL_COND_V(p_from_render_target.is_null(), false); - ERR_FAIL_NULL_V(RendererStorageRD::base_singleton, false); RID source_image = RendererRD::TextureStorage::get_singleton()->render_target_get_rd_texture(p_from_render_target); ERR_FAIL_COND_V(source_image.is_null(), false); diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index c5bcf23c8e..742fa75bb7 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -2435,6 +2435,9 @@ void VisualScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) c void VisualScriptLanguage::get_public_constants(List<Pair<String, Variant>> *p_constants) const { } +void VisualScriptLanguage::get_public_annotations(List<MethodInfo> *p_annotations) const { +} + void VisualScriptLanguage::profiling_start() { } diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h index c2e4d0e597..716310f59b 100644 --- a/modules/visual_script/visual_script.h +++ b/modules/visual_script/visual_script.h @@ -599,6 +599,7 @@ public: virtual void get_recognized_extensions(List<String> *p_extensions) const override; virtual void get_public_functions(List<MethodInfo> *p_functions) const override; virtual void get_public_constants(List<Pair<String, Variant>> *p_constants) const override; + virtual void get_public_annotations(List<MethodInfo> *p_annotations) const override; virtual void profiling_start() override; virtual void profiling_stop() override; diff --git a/platform/android/SCsub b/platform/android/SCsub index ad226255bc..d370a4d18d 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -6,6 +6,7 @@ android_files = [ "os_android.cpp", "android_input_handler.cpp", "file_access_android.cpp", + "file_access_filesystem_jandroid.cpp", "audio_driver_opensl.cpp", "dir_access_jandroid.cpp", "tts_android.cpp", diff --git a/platform/android/dir_access_jandroid.cpp b/platform/android/dir_access_jandroid.cpp index 5b9eee8117..eb344d3b43 100644 --- a/platform/android/dir_access_jandroid.cpp +++ b/platform/android/dir_access_jandroid.cpp @@ -31,30 +31,32 @@ #include "dir_access_jandroid.h" #include "core/string/print_string.h" -#include "file_access_android.h" #include "string_android.h" #include "thread_jandroid.h" -jobject DirAccessJAndroid::io = nullptr; +jobject DirAccessJAndroid::dir_access_handler = nullptr; jclass DirAccessJAndroid::cls = nullptr; jmethodID DirAccessJAndroid::_dir_open = nullptr; jmethodID DirAccessJAndroid::_dir_next = nullptr; jmethodID DirAccessJAndroid::_dir_close = nullptr; jmethodID DirAccessJAndroid::_dir_is_dir = nullptr; - -Ref<DirAccess> DirAccessJAndroid::create_fs() { - return memnew(DirAccessJAndroid); -} +jmethodID DirAccessJAndroid::_dir_exists = nullptr; +jmethodID DirAccessJAndroid::_file_exists = nullptr; +jmethodID DirAccessJAndroid::_get_drive_count = nullptr; +jmethodID DirAccessJAndroid::_get_drive = nullptr; +jmethodID DirAccessJAndroid::_make_dir = nullptr; +jmethodID DirAccessJAndroid::_get_space_left = nullptr; +jmethodID DirAccessJAndroid::_rename = nullptr; +jmethodID DirAccessJAndroid::_remove = nullptr; +jmethodID DirAccessJAndroid::_current_is_hidden = nullptr; Error DirAccessJAndroid::list_dir_begin() { list_dir_end(); - JNIEnv *env = get_jni_env(); - - jstring js = env->NewStringUTF(current_dir.utf8().get_data()); - int res = env->CallIntMethod(io, _dir_open, js); + int res = dir_open(current_dir); if (res <= 0) { return ERR_CANT_OPEN; } + id = res; return OK; @@ -62,169 +64,236 @@ Error DirAccessJAndroid::list_dir_begin() { String DirAccessJAndroid::get_next() { ERR_FAIL_COND_V(id == 0, ""); + if (_dir_next) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, ""); + jstring str = (jstring)env->CallObjectMethod(dir_access_handler, _dir_next, get_access_type(), id); + if (!str) { + return ""; + } - JNIEnv *env = get_jni_env(); - jstring str = (jstring)env->CallObjectMethod(io, _dir_next, id); - if (!str) { + String ret = jstring_to_string((jstring)str, env); + env->DeleteLocalRef((jobject)str); + return ret; + } else { return ""; } - String ret = jstring_to_string((jstring)str, env); - env->DeleteLocalRef((jobject)str); - return ret; } bool DirAccessJAndroid::current_is_dir() const { - JNIEnv *env = get_jni_env(); - - return env->CallBooleanMethod(io, _dir_is_dir, id); + if (_dir_is_dir) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + return env->CallBooleanMethod(dir_access_handler, _dir_is_dir, get_access_type(), id); + } else { + return false; + } } bool DirAccessJAndroid::current_is_hidden() const { - return current != "." && current != ".." && current.begins_with("."); + if (_current_is_hidden) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + return env->CallBooleanMethod(dir_access_handler, _current_is_hidden, get_access_type(), id); + } + return false; } void DirAccessJAndroid::list_dir_end() { if (id == 0) { return; } - JNIEnv *env = get_jni_env(); - env->CallVoidMethod(io, _dir_close, id); + + dir_close(id); id = 0; } int DirAccessJAndroid::get_drive_count() { - return 0; + if (_get_drive_count) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, 0); + return env->CallIntMethod(dir_access_handler, _get_drive_count, get_access_type()); + } else { + return 0; + } } String DirAccessJAndroid::get_drive(int p_drive) { - return ""; + if (_get_drive) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, ""); + jstring j_drive = (jstring)env->CallObjectMethod(dir_access_handler, _get_drive, get_access_type(), p_drive); + if (!j_drive) { + return ""; + } + + String drive = jstring_to_string(j_drive, env); + env->DeleteLocalRef(j_drive); + return drive; + } else { + return ""; + } } Error DirAccessJAndroid::change_dir(String p_dir) { - JNIEnv *env = get_jni_env(); - - if (p_dir.is_empty() || p_dir == "." || (p_dir == ".." && current_dir.is_empty())) { + String new_dir = get_absolute_path(p_dir); + if (new_dir == current_dir) { return OK; } - String new_dir; - - if (p_dir != "res://" && p_dir.length() > 1 && p_dir.ends_with("/")) { - p_dir = p_dir.substr(0, p_dir.length() - 1); - } - - if (p_dir.begins_with("/")) { - new_dir = p_dir.substr(1, p_dir.length()); - } else if (p_dir.begins_with("res://")) { - new_dir = p_dir.substr(6, p_dir.length()); - } else if (current_dir.is_empty()) { - new_dir = p_dir; - } else { - new_dir = current_dir.plus_file(p_dir); - } - - //test if newdir exists - new_dir = new_dir.simplify_path(); - - jstring js = env->NewStringUTF(new_dir.utf8().get_data()); - int res = env->CallIntMethod(io, _dir_open, js); - env->DeleteLocalRef(js); - if (res <= 0) { + if (!dir_exists(new_dir)) { return ERR_INVALID_PARAMETER; } - env->CallVoidMethod(io, _dir_close, res); - current_dir = new_dir; - return OK; } -String DirAccessJAndroid::get_current_dir(bool p_include_drive) const { - return "res://" + current_dir; +String DirAccessJAndroid::get_absolute_path(String p_path) { + if (current_dir != "" && p_path == current_dir) { + return current_dir; + } + + if (p_path.is_relative_path()) { + p_path = get_current_dir().plus_file(p_path); + } + + p_path = fix_path(p_path); + p_path = p_path.simplify_path(); + return p_path; } bool DirAccessJAndroid::file_exists(String p_file) { - String sd; - if (current_dir.is_empty()) { - sd = p_file; + if (_file_exists) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + + String path = get_absolute_path(p_file); + jstring j_path = env->NewStringUTF(path.utf8().get_data()); + bool result = env->CallBooleanMethod(dir_access_handler, _file_exists, get_access_type(), j_path); + env->DeleteLocalRef(j_path); + return result; } else { - sd = current_dir.plus_file(p_file); + return false; } - - Ref<FileAccessAndroid> f; - f.instantiate(); - bool exists = f->file_exists(sd); - - return exists; } bool DirAccessJAndroid::dir_exists(String p_dir) { - JNIEnv *env = get_jni_env(); - - String sd; - - if (current_dir.is_empty()) { - sd = p_dir; + if (_dir_exists) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + + String path = get_absolute_path(p_dir); + jstring j_path = env->NewStringUTF(path.utf8().get_data()); + bool result = env->CallBooleanMethod(dir_access_handler, _dir_exists, get_access_type(), j_path); + env->DeleteLocalRef(j_path); + return result; } else { - if (p_dir.is_relative_path()) { - sd = current_dir.plus_file(p_dir); - } else { - sd = fix_path(p_dir); - } - } - - String path = sd.simplify_path(); - - if (path.begins_with("/")) { - path = path.substr(1, path.length()); - } else if (path.begins_with("res://")) { - path = path.substr(6, path.length()); + return false; } +} - jstring js = env->NewStringUTF(path.utf8().get_data()); - int res = env->CallIntMethod(io, _dir_open, js); - env->DeleteLocalRef(js); - if (res <= 0) { - return false; +Error DirAccessJAndroid::make_dir_recursive(String p_dir) { + // Check if the directory exists already + if (dir_exists(p_dir)) { + return ERR_ALREADY_EXISTS; } - env->CallVoidMethod(io, _dir_close, res); + if (_make_dir) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, ERR_UNCONFIGURED); - return true; + String path = get_absolute_path(p_dir); + jstring j_dir = env->NewStringUTF(path.utf8().get_data()); + bool result = env->CallBooleanMethod(dir_access_handler, _make_dir, get_access_type(), j_dir); + env->DeleteLocalRef(j_dir); + if (result) { + return OK; + } else { + return FAILED; + } + } else { + return ERR_UNCONFIGURED; + } } Error DirAccessJAndroid::make_dir(String p_dir) { - ERR_FAIL_V(ERR_UNAVAILABLE); + return make_dir_recursive(p_dir); } Error DirAccessJAndroid::rename(String p_from, String p_to) { - ERR_FAIL_V(ERR_UNAVAILABLE); -} + if (_rename) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, ERR_UNCONFIGURED); -Error DirAccessJAndroid::remove(String p_name) { - ERR_FAIL_V(ERR_UNAVAILABLE); + String from_path = get_absolute_path(p_from); + jstring j_from = env->NewStringUTF(from_path.utf8().get_data()); + + String to_path = get_absolute_path(p_to); + jstring j_to = env->NewStringUTF(to_path.utf8().get_data()); + + bool result = env->CallBooleanMethod(dir_access_handler, _rename, get_access_type(), j_from, j_to); + env->DeleteLocalRef(j_from); + env->DeleteLocalRef(j_to); + if (result) { + return OK; + } else { + return FAILED; + } + } else { + return ERR_UNCONFIGURED; + } } -String DirAccessJAndroid::get_filesystem_type() const { - return "APK"; +Error DirAccessJAndroid::remove(String p_name) { + if (_remove) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, ERR_UNCONFIGURED); + + String path = get_absolute_path(p_name); + jstring j_name = env->NewStringUTF(path.utf8().get_data()); + bool result = env->CallBooleanMethod(dir_access_handler, _remove, get_access_type(), j_name); + env->DeleteLocalRef(j_name); + if (result) { + return OK; + } else { + return FAILED; + } + } else { + return ERR_UNCONFIGURED; + } } uint64_t DirAccessJAndroid::get_space_left() { - return 0; + if (_get_space_left) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, 0); + return env->CallLongMethod(dir_access_handler, _get_space_left, get_access_type()); + } else { + return 0; + } } -void DirAccessJAndroid::setup(jobject p_io) { +void DirAccessJAndroid::setup(jobject p_dir_access_handler) { JNIEnv *env = get_jni_env(); - io = p_io; + dir_access_handler = env->NewGlobalRef(p_dir_access_handler); - jclass c = env->GetObjectClass(io); + jclass c = env->GetObjectClass(dir_access_handler); cls = (jclass)env->NewGlobalRef(c); - _dir_open = env->GetMethodID(cls, "dir_open", "(Ljava/lang/String;)I"); - _dir_next = env->GetMethodID(cls, "dir_next", "(I)Ljava/lang/String;"); - _dir_close = env->GetMethodID(cls, "dir_close", "(I)V"); - _dir_is_dir = env->GetMethodID(cls, "dir_is_dir", "(I)Z"); + _dir_open = env->GetMethodID(cls, "dirOpen", "(ILjava/lang/String;)I"); + _dir_next = env->GetMethodID(cls, "dirNext", "(II)Ljava/lang/String;"); + _dir_close = env->GetMethodID(cls, "dirClose", "(II)V"); + _dir_is_dir = env->GetMethodID(cls, "dirIsDir", "(II)Z"); + _dir_exists = env->GetMethodID(cls, "dirExists", "(ILjava/lang/String;)Z"); + _file_exists = env->GetMethodID(cls, "fileExists", "(ILjava/lang/String;)Z"); + _get_drive_count = env->GetMethodID(cls, "getDriveCount", "(I)I"); + _get_drive = env->GetMethodID(cls, "getDrive", "(II)Ljava/lang/String;"); + _make_dir = env->GetMethodID(cls, "makeDir", "(ILjava/lang/String;)Z"); + _get_space_left = env->GetMethodID(cls, "getSpaceLeft", "(I)J"); + _rename = env->GetMethodID(cls, "rename", "(ILjava/lang/String;Ljava/lang/String;)Z"); + _remove = env->GetMethodID(cls, "remove", "(ILjava/lang/String;)Z"); + _current_is_hidden = env->GetMethodID(cls, "isCurrentHidden", "(II)Z"); } DirAccessJAndroid::DirAccessJAndroid() { @@ -233,3 +302,26 @@ DirAccessJAndroid::DirAccessJAndroid() { DirAccessJAndroid::~DirAccessJAndroid() { list_dir_end(); } + +int DirAccessJAndroid::dir_open(String p_path) { + if (_dir_open) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, 0); + + String path = get_absolute_path(p_path); + jstring js = env->NewStringUTF(path.utf8().get_data()); + int dirId = env->CallIntMethod(dir_access_handler, _dir_open, get_access_type(), js); + env->DeleteLocalRef(js); + return dirId; + } else { + return 0; + } +} + +void DirAccessJAndroid::dir_close(int p_id) { + if (_dir_close) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND(env == nullptr); + env->CallVoidMethod(dir_access_handler, _dir_close, get_access_type(), p_id); + } +} diff --git a/platform/android/dir_access_jandroid.h b/platform/android/dir_access_jandroid.h index 0e1b12cb58..d469c9d317 100644 --- a/platform/android/dir_access_jandroid.h +++ b/platform/android/dir_access_jandroid.h @@ -32,58 +32,70 @@ #define DIR_ACCESS_JANDROID_H #include "core/io/dir_access.h" +#include "drivers/unix/dir_access_unix.h" #include "java_godot_lib_jni.h" #include <stdio.h> -class DirAccessJAndroid : public DirAccess { - static jobject io; +/// Android implementation of the DirAccess interface used to provide access to +/// ACCESS_FILESYSTEM and ACCESS_RESOURCES directory resources. +/// The implementation use jni in order to comply with Android filesystem +/// access restriction. +class DirAccessJAndroid : public DirAccessUnix { + static jobject dir_access_handler; static jclass cls; static jmethodID _dir_open; static jmethodID _dir_next; static jmethodID _dir_close; static jmethodID _dir_is_dir; - - int id = 0; - - String current_dir; - String current; - - static Ref<DirAccess> create_fs(); + static jmethodID _dir_exists; + static jmethodID _file_exists; + static jmethodID _get_drive_count; + static jmethodID _get_drive; + static jmethodID _make_dir; + static jmethodID _get_space_left; + static jmethodID _rename; + static jmethodID _remove; + static jmethodID _current_is_hidden; public: - virtual Error list_dir_begin(); ///< This starts dir listing - virtual String get_next(); - virtual bool current_is_dir() const; - virtual bool current_is_hidden() const; - virtual void list_dir_end(); ///< + virtual Error list_dir_begin() override; ///< This starts dir listing + virtual String get_next() override; + virtual bool current_is_dir() const override; + virtual bool current_is_hidden() const override; + virtual void list_dir_end() override; ///< - virtual int get_drive_count(); - virtual String get_drive(int p_drive); + virtual int get_drive_count() override; + virtual String get_drive(int p_drive) override; - virtual Error change_dir(String p_dir); ///< can be relative or absolute, return false on success - virtual String get_current_dir(bool p_include_drive = true) const; ///< return current dir location + virtual Error change_dir(String p_dir) override; ///< can be relative or absolute, return false on success - virtual bool file_exists(String p_file); - virtual bool dir_exists(String p_dir); + virtual bool file_exists(String p_file) override; + virtual bool dir_exists(String p_dir) override; - virtual Error make_dir(String p_dir); + virtual Error make_dir(String p_dir) override; + virtual Error make_dir_recursive(String p_dir) override; - virtual Error rename(String p_from, String p_to); - virtual Error remove(String p_name); + virtual Error rename(String p_from, String p_to) override; + virtual Error remove(String p_name) override; - virtual bool is_link(String p_file) { return false; } - virtual String read_link(String p_file) { return p_file; } - virtual Error create_link(String p_source, String p_target) { return FAILED; } + virtual bool is_link(String p_file) override { return false; } + virtual String read_link(String p_file) override { return p_file; } + virtual Error create_link(String p_source, String p_target) override { return FAILED; } - virtual String get_filesystem_type() const; + virtual uint64_t get_space_left() override; - uint64_t get_space_left(); - - static void setup(jobject p_io); + static void setup(jobject p_dir_access_handler); DirAccessJAndroid(); ~DirAccessJAndroid(); + +private: + int id = 0; + + int dir_open(String p_path); + void dir_close(int p_id); + String get_absolute_path(String p_path); }; #endif // DIR_ACCESS_JANDROID_H diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index e94ca87d81..d72137e523 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -123,6 +123,7 @@ static const char *android_perms[] = { "MANAGE_ACCOUNTS", "MANAGE_APP_TOKENS", "MANAGE_DOCUMENTS", + "MANAGE_EXTERNAL_STORAGE", "MASTER_CLEAR", "MEDIA_CONTENT_CONTROL", "MODIFY_AUDIO_SETTINGS", @@ -245,7 +246,7 @@ static const char *APK_ASSETS_DIRECTORY = "res://android/build/assets"; static const char *AAB_ASSETS_DIRECTORY = "res://android/build/assetPacks/installTime/src/main/assets"; static const int DEFAULT_MIN_SDK_VERSION = 19; // Should match the value in 'platform/android/java/app/config.gradle#minSdk' -static const int DEFAULT_TARGET_SDK_VERSION = 31; // Should match the value in 'platform/android/java/app/config.gradle#targetSdk' +static const int DEFAULT_TARGET_SDK_VERSION = 32; // Should match the value in 'platform/android/java/app/config.gradle#targetSdk' void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) { EditorExportPlatformAndroid *ea = static_cast<EditorExportPlatformAndroid *>(ud); @@ -276,6 +277,7 @@ void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) { } } +#ifndef ANDROID_ENABLED // Check for devices updates String adb = get_adb_path(); if (FileAccess::exists(adb)) { @@ -387,6 +389,7 @@ void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) { ea->devices_changed.set(); } } +#endif uint64_t sleep = 200; uint64_t wait = 3000000; @@ -399,6 +402,7 @@ void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) { } } +#ifndef ANDROID_ENABLED if (EditorSettings::get_singleton()->get("export/android/shutdown_adb_on_exit")) { String adb = get_adb_path(); if (!FileAccess::exists(adb)) { @@ -409,6 +413,7 @@ void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) { args.push_back("kill-server"); OS::get_singleton()->execute(adb, args); } +#endif } String EditorExportPlatformAndroid::get_project_name(const String &p_name) const { @@ -747,10 +752,14 @@ Error EditorExportPlatformAndroid::copy_gradle_so(void *p_userdata, const Shared return OK; } -bool EditorExportPlatformAndroid::_has_storage_permission(const Vector<String> &p_permissions) { +bool EditorExportPlatformAndroid::_has_read_write_storage_permission(const Vector<String> &p_permissions) { return p_permissions.find("android.permission.READ_EXTERNAL_STORAGE") != -1 || p_permissions.find("android.permission.WRITE_EXTERNAL_STORAGE") != -1; } +bool EditorExportPlatformAndroid::_has_manage_external_storage_permission(const Vector<String> &p_permissions) { + return p_permissions.find("android.permission.MANAGE_EXTERNAL_STORAGE") != -1; +} + void EditorExportPlatformAndroid::_get_permissions(const Ref<EditorExportPreset> &p_preset, bool p_give_internet, Vector<String> &r_permissions) { const char **aperms = android_perms; while (*aperms) { @@ -798,7 +807,7 @@ void EditorExportPlatformAndroid::_write_tmp_manifest(const Ref<EditorExportPres _get_permissions(p_preset, p_give_internet, perms); for (int i = 0; i < perms.size(); i++) { String permission = perms.get(i); - if (permission == "android.permission.WRITE_EXTERNAL_STORAGE" || permission == "android.permission.READ_EXTERNAL_STORAGE") { + if (permission == "android.permission.WRITE_EXTERNAL_STORAGE" || (permission == "android.permission.READ_EXTERNAL_STORAGE" && _has_manage_external_storage_permission(perms))) { manifest_text += vformat(" <uses-permission android:name=\"%s\" android:maxSdkVersion=\"29\" />\n", permission); } else { manifest_text += vformat(" <uses-permission android:name=\"%s\" />\n", permission); @@ -806,7 +815,7 @@ void EditorExportPlatformAndroid::_write_tmp_manifest(const Ref<EditorExportPres } manifest_text += _get_xr_features_tag(p_preset); - manifest_text += _get_application_tag(p_preset, _has_storage_permission(perms)); + manifest_text += _get_application_tag(p_preset, _has_read_write_storage_permission(perms)); manifest_text += "</manifest>\n"; String manifest_path = vformat("res://android/build/src/%s/AndroidManifest.xml", (p_debug ? "debug" : "release")); @@ -864,7 +873,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p Vector<String> perms; // Write permissions into the perms variable. _get_permissions(p_preset, p_give_internet, perms); - bool has_storage_permission = _has_storage_permission(perms); + bool has_read_write_storage_permission = _has_read_write_storage_permission(perms); while (ofs < (uint32_t)p_manifest.size()) { uint32_t chunk = decode_uint32(&p_manifest[ofs]); @@ -948,7 +957,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p } if (tname == "application" && attrname == "requestLegacyExternalStorage") { - encode_uint32(has_storage_permission ? 0xFFFFFFFF : 0, &p_manifest.write[iofs + 16]); + encode_uint32(has_read_write_storage_permission ? 0xFFFFFFFF : 0, &p_manifest.write[iofs + 16]); } if (tname == "application" && attrname == "allowBackup") { diff --git a/platform/android/export/export_plugin.h b/platform/android/export/export_plugin.h index eeb5aae0f1..15ac8091be 100644 --- a/platform/android/export/export_plugin.h +++ b/platform/android/export/export_plugin.h @@ -116,7 +116,9 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { static Error copy_gradle_so(void *p_userdata, const SharedObject &p_so); - bool _has_storage_permission(const Vector<String> &p_permissions); + bool _has_read_write_storage_permission(const Vector<String> &p_permissions); + + bool _has_manage_external_storage_permission(const Vector<String> &p_permissions); void _get_permissions(const Ref<EditorExportPreset> &p_preset, bool p_give_internet, Vector<String> &r_permissions); diff --git a/platform/android/export/gradle_export_util.cpp b/platform/android/export/gradle_export_util.cpp index 9a470edfdd..8d370a31a4 100644 --- a/platform/android/export/gradle_export_util.cpp +++ b/platform/android/export/gradle_export_util.cpp @@ -254,7 +254,7 @@ String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) { return manifest_activity_text; } -String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_storage_permission) { +String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_read_write_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( @@ -271,7 +271,7 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_ bool_to_string(p_preset->get("user_data_backup/allow")), bool_to_string(p_preset->get("package/classify_as_game")), bool_to_string(p_preset->get("package/retain_data_on_uninstall")), - bool_to_string(p_has_storage_permission)); + bool_to_string(p_has_read_write_storage_permission)); if (uses_xr) { bool hand_tracking_enabled = (int)(p_preset->get("xr_features/hand_tracking")) > XR_HAND_TRACKING_NONE; diff --git a/platform/android/export/gradle_export_util.h b/platform/android/export/gradle_export_util.h index 109852bdfc..7896392d16 100644 --- a/platform/android/export/gradle_export_util.h +++ b/platform/android/export/gradle_export_util.h @@ -104,6 +104,6 @@ String _get_xr_features_tag(const Ref<EditorExportPreset> &p_preset); String _get_activity_tag(const Ref<EditorExportPreset> &p_preset); -String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_storage_permission); +String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_read_write_storage_permission); #endif // GODOT_GRADLE_EXPORT_UTIL_H diff --git a/platform/android/file_access_android.cpp b/platform/android/file_access_android.cpp index 4bb8a13bb6..ace7636e6c 100644 --- a/platform/android/file_access_android.cpp +++ b/platform/android/file_access_android.cpp @@ -34,14 +34,20 @@ AAssetManager *FileAccessAndroid::asset_manager = nullptr; -Ref<FileAccess> FileAccessAndroid::create_android() { - return memnew(FileAccessAndroid); +String FileAccessAndroid::get_path() const { + return path_src; +} + +String FileAccessAndroid::get_path_absolute() const { + return absolute_path; } Error FileAccessAndroid::_open(const String &p_path, int p_mode_flags) { _close(); + path_src = p_path; String path = fix_path(p_path).simplify_path(); + absolute_path = path; if (path.begins_with("/")) { path = path.substr(1, path.length()); } else if (path.begins_with("res://")) { @@ -134,7 +140,7 @@ uint64_t FileAccessAndroid::get_buffer(uint8_t *p_dst, uint64_t p_length) const } Error FileAccessAndroid::get_error() const { - return eof ? ERR_FILE_EOF : OK; //not sure what else it may happen + return eof ? ERR_FILE_EOF : OK; // not sure what else it may happen } void FileAccessAndroid::flush() { diff --git a/platform/android/file_access_android.h b/platform/android/file_access_android.h index c16f74ac43..e6fd8c857b 100644 --- a/platform/android/file_access_android.h +++ b/platform/android/file_access_android.h @@ -37,11 +37,12 @@ #include <stdio.h> class FileAccessAndroid : public FileAccess { - static Ref<FileAccess> create_android(); mutable AAsset *asset = nullptr; mutable uint64_t len = 0; mutable uint64_t pos = 0; mutable bool eof = false; + String absolute_path; + String path_src; void _close(); @@ -51,6 +52,11 @@ public: virtual Error _open(const String &p_path, int p_mode_flags); // open a file virtual bool is_open() const; // true when file is open + /// returns the path for the current open file + virtual String get_path() const; + /// returns the absolute path for the current open file + virtual String get_path_absolute() const; + virtual void seek(uint64_t p_position); // seek to a given position virtual void seek_end(int64_t p_position = 0); // seek from the end of file virtual uint64_t get_position() const; // get position in the file diff --git a/platform/android/file_access_filesystem_jandroid.cpp b/platform/android/file_access_filesystem_jandroid.cpp new file mode 100644 index 0000000000..c1a48e025e --- /dev/null +++ b/platform/android/file_access_filesystem_jandroid.cpp @@ -0,0 +1,283 @@ +/*************************************************************************/ +/* file_access_filesystem_jandroid.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "file_access_filesystem_jandroid.h" +#include "core/os/os.h" +#include "thread_jandroid.h" +#include <unistd.h> + +jobject FileAccessFilesystemJAndroid::file_access_handler = nullptr; +jclass FileAccessFilesystemJAndroid::cls; + +jmethodID FileAccessFilesystemJAndroid::_file_open = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_get_size = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_seek = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_seek_end = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_read = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_tell = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_eof = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_close = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_write = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_flush = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_exists = nullptr; +jmethodID FileAccessFilesystemJAndroid::_file_last_modified = nullptr; + +String FileAccessFilesystemJAndroid::get_path() const { + return path_src; +} + +String FileAccessFilesystemJAndroid::get_path_absolute() const { + return absolute_path; +} + +Error FileAccessFilesystemJAndroid::_open(const String &p_path, int p_mode_flags) { + if (is_open()) { + _close(); + } + + if (_file_open) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, ERR_UNCONFIGURED); + + String path = fix_path(p_path).simplify_path(); + jstring js = env->NewStringUTF(path.utf8().get_data()); + int res = env->CallIntMethod(file_access_handler, _file_open, js, p_mode_flags); + env->DeleteLocalRef(js); + + if (res <= 0) { + switch (res) { + case 0: + default: + return ERR_FILE_CANT_OPEN; + + case -1: + return ERR_FILE_NOT_FOUND; + } + } + + id = res; + path_src = p_path; + absolute_path = path; + return OK; + } else { + return ERR_UNCONFIGURED; + } +} + +void FileAccessFilesystemJAndroid::_close() { + if (!is_open()) { + return; + } + + if (_file_close) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND(env == nullptr); + env->CallVoidMethod(file_access_handler, _file_close, id); + } + id = 0; +} + +bool FileAccessFilesystemJAndroid::is_open() const { + return id != 0; +} + +void FileAccessFilesystemJAndroid::seek(uint64_t p_position) { + if (_file_seek) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND(env == nullptr); + ERR_FAIL_COND_MSG(!is_open(), "File must be opened before use."); + env->CallVoidMethod(file_access_handler, _file_seek, id, p_position); + } +} + +void FileAccessFilesystemJAndroid::seek_end(int64_t p_position) { + if (_file_seek_end) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND(env == nullptr); + ERR_FAIL_COND_MSG(!is_open(), "File must be opened before use."); + env->CallVoidMethod(file_access_handler, _file_seek_end, id, p_position); + } +} + +uint64_t FileAccessFilesystemJAndroid::get_position() const { + if (_file_tell) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); + return env->CallLongMethod(file_access_handler, _file_tell, id); + } else { + return 0; + } +} + +uint64_t FileAccessFilesystemJAndroid::get_length() const { + if (_file_get_size) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); + return env->CallLongMethod(file_access_handler, _file_get_size, id); + } else { + return 0; + } +} + +bool FileAccessFilesystemJAndroid::eof_reached() const { + if (_file_eof) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + ERR_FAIL_COND_V_MSG(!is_open(), false, "File must be opened before use."); + return env->CallBooleanMethod(file_access_handler, _file_eof, id); + } else { + return false; + } +} + +uint8_t FileAccessFilesystemJAndroid::get_8() const { + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); + uint8_t byte; + get_buffer(&byte, 1); + return byte; +} + +uint64_t FileAccessFilesystemJAndroid::get_buffer(uint8_t *p_dst, uint64_t p_length) const { + if (_file_read) { + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); + if (p_length == 0) { + return 0; + } + + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, 0); + + jobject j_buffer = env->NewDirectByteBuffer(p_dst, p_length); + int length = env->CallIntMethod(file_access_handler, _file_read, id, j_buffer); + env->DeleteLocalRef(j_buffer); + return length; + } else { + return 0; + } +} + +void FileAccessFilesystemJAndroid::store_8(uint8_t p_dest) { + store_buffer(&p_dest, 1); +} + +void FileAccessFilesystemJAndroid::store_buffer(const uint8_t *p_src, uint64_t p_length) { + if (_file_write) { + ERR_FAIL_COND_MSG(!is_open(), "File must be opened before use."); + if (p_length == 0) { + return; + } + + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND(env == nullptr); + + jobject j_buffer = env->NewDirectByteBuffer((void *)p_src, p_length); + env->CallVoidMethod(file_access_handler, _file_write, id, j_buffer); + env->DeleteLocalRef(j_buffer); + } +} + +Error FileAccessFilesystemJAndroid::get_error() const { + if (eof_reached()) { + return ERR_FILE_EOF; + } + return OK; +} + +void FileAccessFilesystemJAndroid::flush() { + if (_file_flush) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND(env == nullptr); + ERR_FAIL_COND_MSG(!is_open(), "File must be opened before use."); + env->CallVoidMethod(file_access_handler, _file_flush, id); + } +} + +bool FileAccessFilesystemJAndroid::file_exists(const String &p_path) { + if (_file_exists) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + + String path = fix_path(p_path).simplify_path(); + jstring js = env->NewStringUTF(path.utf8().get_data()); + bool result = env->CallBooleanMethod(file_access_handler, _file_exists, js); + env->DeleteLocalRef(js); + return result; + } else { + return false; + } +} + +uint64_t FileAccessFilesystemJAndroid::_get_modified_time(const String &p_file) { + if (_file_last_modified) { + JNIEnv *env = get_jni_env(); + ERR_FAIL_COND_V(env == nullptr, false); + + String path = fix_path(p_file).simplify_path(); + jstring js = env->NewStringUTF(path.utf8().get_data()); + uint64_t result = env->CallLongMethod(file_access_handler, _file_last_modified, js); + env->DeleteLocalRef(js); + return result; + } else { + return 0; + } +} + +void FileAccessFilesystemJAndroid::setup(jobject p_file_access_handler) { + JNIEnv *env = get_jni_env(); + file_access_handler = env->NewGlobalRef(p_file_access_handler); + + jclass c = env->GetObjectClass(file_access_handler); + cls = (jclass)env->NewGlobalRef(c); + + _file_open = env->GetMethodID(cls, "fileOpen", "(Ljava/lang/String;I)I"); + _file_get_size = env->GetMethodID(cls, "fileGetSize", "(I)J"); + _file_tell = env->GetMethodID(cls, "fileGetPosition", "(I)J"); + _file_eof = env->GetMethodID(cls, "isFileEof", "(I)Z"); + _file_seek = env->GetMethodID(cls, "fileSeek", "(IJ)V"); + _file_seek_end = env->GetMethodID(cls, "fileSeekFromEnd", "(IJ)V"); + _file_read = env->GetMethodID(cls, "fileRead", "(ILjava/nio/ByteBuffer;)I"); + _file_close = env->GetMethodID(cls, "fileClose", "(I)V"); + _file_write = env->GetMethodID(cls, "fileWrite", "(ILjava/nio/ByteBuffer;)V"); + _file_flush = env->GetMethodID(cls, "fileFlush", "(I)V"); + _file_exists = env->GetMethodID(cls, "fileExists", "(Ljava/lang/String;)Z"); + _file_last_modified = env->GetMethodID(cls, "fileLastModified", "(Ljava/lang/String;)J"); +} + +FileAccessFilesystemJAndroid::FileAccessFilesystemJAndroid() { + id = 0; +} + +FileAccessFilesystemJAndroid::~FileAccessFilesystemJAndroid() { + if (is_open()) { + _close(); + } +} diff --git a/platform/android/file_access_filesystem_jandroid.h b/platform/android/file_access_filesystem_jandroid.h new file mode 100644 index 0000000000..18d5df1628 --- /dev/null +++ b/platform/android/file_access_filesystem_jandroid.h @@ -0,0 +1,97 @@ +/*************************************************************************/ +/* file_access_filesystem_jandroid.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef FILE_ACCESS_FILESYSTEM_JANDROID_H +#define FILE_ACCESS_FILESYSTEM_JANDROID_H + +#include "core/io/file_access.h" +#include "java_godot_lib_jni.h" + +class FileAccessFilesystemJAndroid : public FileAccess { + static jobject file_access_handler; + static jclass cls; + + static jmethodID _file_open; + static jmethodID _file_get_size; + static jmethodID _file_seek; + static jmethodID _file_seek_end; + static jmethodID _file_tell; + static jmethodID _file_eof; + static jmethodID _file_read; + static jmethodID _file_write; + static jmethodID _file_flush; + static jmethodID _file_close; + static jmethodID _file_exists; + static jmethodID _file_last_modified; + + int id; + String absolute_path; + String path_src; + + void _close(); ///< close a file + +public: + virtual Error _open(const String &p_path, int p_mode_flags) override; ///< open a file + virtual bool is_open() const override; ///< true when file is open + + /// returns the path for the current open file + virtual String get_path() const override; + /// returns the absolute path for the current open file + virtual String get_path_absolute() const override; + + virtual void seek(uint64_t p_position) override; ///< seek to a given position + virtual void seek_end(int64_t p_position = 0) override; ///< seek from the end of file + virtual uint64_t get_position() const override; ///< get position in the file + virtual uint64_t get_length() const override; ///< get size of the file + + virtual bool eof_reached() const override; ///< reading passed EOF + + virtual uint8_t get_8() const override; ///< get a byte + virtual uint64_t get_buffer(uint8_t *p_dst, uint64_t p_length) const override; + + virtual Error get_error() const override; ///< get last error + + virtual void flush() override; + virtual void store_8(uint8_t p_dest) override; ///< store a byte + virtual void store_buffer(const uint8_t *p_src, uint64_t p_length) override; + + virtual bool file_exists(const String &p_path) override; ///< return true if a file exists + + static void setup(jobject p_file_access_handler); + + virtual uint64_t _get_modified_time(const String &p_file) override; + virtual uint32_t _get_unix_permissions(const String &p_file) override { return 0; } + virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) override { return FAILED; } + + FileAccessFilesystemJAndroid(); + ~FileAccessFilesystemJAndroid(); +}; + +#endif // FILE_ACCESS_FILESYSTEM_JANDROID_H diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle index 3daf628e63..fbd97fae0b 100644 --- a/platform/android/java/app/config.gradle +++ b/platform/android/java/app/config.gradle @@ -1,9 +1,9 @@ ext.versions = [ androidGradlePlugin: '7.0.3', - compileSdk : 31, + compileSdk : 32, minSdk : 19, // Also update 'platform/android/java/lib/AndroidManifest.xml#minSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_MIN_SDK_VERSION' - targetSdk : 31, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION' - buildTools : '30.0.3', + targetSdk : 32, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION' + buildTools : '32.0.0', kotlinVersion : '1.6.21', fragmentVersion : '1.3.6', nexusPublishVersion: '1.1.0', diff --git a/platform/android/java/editor/build.gradle b/platform/android/java/editor/build.gradle index dd167c3880..729966ee69 100644 --- a/platform/android/java/editor/build.gradle +++ b/platform/android/java/editor/build.gradle @@ -23,8 +23,7 @@ android { versionCode getGodotLibraryVersionCode() versionName getGodotLibraryVersionName() minSdkVersion versions.minSdk - //noinspection ExpiredTargetSdkVersion - Restrict to version 29 until https://github.com/godotengine/godot/pull/51815 is submitted - targetSdkVersion 29 // versions.targetSdk + targetSdkVersion versions.targetSdk missingDimensionStrategy 'products', 'editor' } diff --git a/platform/android/java/editor/src/main/AndroidManifest.xml b/platform/android/java/editor/src/main/AndroidManifest.xml index 93cbb47400..abf506a83c 100644 --- a/platform/android/java/editor/src/main/AndroidManifest.xml +++ b/platform/android/java/editor/src/main/AndroidManifest.xml @@ -14,8 +14,12 @@ android:glEsVersion="0x00020000" android:required="true" /> - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" + tools:ignore="ScopedStorage" /> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" + android:maxSdkVersion="29"/> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" + android:maxSdkVersion="29"/> <uses-permission android:name="android.permission.INTERNET" /> <application diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt index a1ade722e8..740f3f48d3 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt @@ -30,10 +30,14 @@ package org.godotengine.editor +import android.Manifest import android.content.Intent +import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.os.Debug +import android.os.Environment +import android.widget.Toast import androidx.window.layout.WindowMetricsCalculator import org.godotengine.godot.FullScreenGodotApp import org.godotengine.godot.utils.PermissionsUtil @@ -68,7 +72,7 @@ open class GodotEditor : FullScreenGodotApp() { val params = intent.getStringArrayExtra(COMMAND_LINE_PARAMS) updateCommandLineParams(params) - if (BuildConfig.BUILD_TYPE == "debug" && WAIT_FOR_DEBUGGER) { + if (BuildConfig.BUILD_TYPE == "dev" && WAIT_FOR_DEBUGGER) { Debug.waitForDebugger() } @@ -143,4 +147,50 @@ open class GodotEditor : FullScreenGodotApp() { * The Godot Android Editor sets its own orientation via its AndroidManifest */ protected open fun overrideOrientationRequest() = true + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + // Check if we got the MANAGE_EXTERNAL_STORAGE permission + if (requestCode == PermissionsUtil.REQUEST_MANAGE_EXTERNAL_STORAGE_REQ_CODE) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (!Environment.isExternalStorageManager()) { + Toast.makeText( + this, + R.string.denied_storage_permission_error_msg, + Toast.LENGTH_LONG + ).show() + } + } + } + } + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array<String?>, + grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + // Check if we got access to the necessary storage permissions + if (requestCode == PermissionsUtil.REQUEST_ALL_PERMISSION_REQ_CODE) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + var hasReadAccess = false + var hasWriteAccess = false + for (i in permissions.indices) { + if (Manifest.permission.READ_EXTERNAL_STORAGE == permissions[i] && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + hasReadAccess = true + } + if (Manifest.permission.WRITE_EXTERNAL_STORAGE == permissions[i] && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + hasWriteAccess = true + } + } + if (!hasReadAccess || !hasWriteAccess) { + Toast.makeText( + this, + R.string.denied_storage_permission_error_msg, + Toast.LENGTH_LONG + ).show() + } + } + } + } } diff --git a/platform/android/java/editor/src/main/res/values/strings.xml b/platform/android/java/editor/src/main/res/values/strings.xml index e8ce34f34d..837a5d62e1 100644 --- a/platform/android/java/editor/src/main/res/values/strings.xml +++ b/platform/android/java/editor/src/main/res/values/strings.xml @@ -1,4 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <string name="godot_editor_name_string">Godot Editor 4.x</string> + + <string name="denied_storage_permission_error_msg">Missing storage access permission!</string> </resources> diff --git a/platform/android/java/lib/AndroidManifest.xml b/platform/android/java/lib/AndroidManifest.xml index 228d8d45fa..79b5aadf2a 100644 --- a/platform/android/java/lib/AndroidManifest.xml +++ b/platform/android/java/lib/AndroidManifest.xml @@ -5,7 +5,7 @@ android:versionName="1.0"> <!-- Should match the mindSdk and targetSdk values in platform/android/java/app/config.gradle --> - <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" /> + <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="32" /> <application> 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 cafae94d62..28e689e63a 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java @@ -34,6 +34,8 @@ import static android.content.Context.MODE_PRIVATE; import static android.content.Context.WINDOW_SERVICE; import org.godotengine.godot.input.GodotEditText; +import org.godotengine.godot.io.directory.DirectoryAccessHandler; +import org.godotengine.godot.io.file.FileAccessHandler; import org.godotengine.godot.plugin.GodotPlugin; import org.godotengine.godot.plugin.GodotPluginRegistry; import org.godotengine.godot.tts.GodotTTS; @@ -164,9 +166,9 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC private Sensor mMagnetometer; private Sensor mGyroscope; - public static GodotIO io; - public static GodotNetUtils netUtils; - public static GodotTTS tts; + public GodotIO io; + public GodotNetUtils netUtils; + public GodotTTS tts; public interface ResultCallback { void callback(int requestCode, int resultCode, Intent data); @@ -458,16 +460,26 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC final Activity activity = getActivity(); io = new GodotIO(activity); - GodotLib.io = io; netUtils = new GodotNetUtils(activity); tts = new GodotTTS(activity); + Context context = getContext(); + DirectoryAccessHandler directoryAccessHandler = new DirectoryAccessHandler(context); + FileAccessHandler fileAccessHandler = new FileAccessHandler(context); mSensorManager = (SensorManager)activity.getSystemService(Context.SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); - GodotLib.initialize(activity, this, activity.getAssets(), use_apk_expansion); + GodotLib.initialize(activity, + this, + activity.getAssets(), + io, + netUtils, + directoryAccessHandler, + fileAccessHandler, + use_apk_expansion, + tts); result_callback = null; 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 a8e3669ac6..0434efdf4c 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java @@ -36,7 +36,6 @@ import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.pm.ActivityInfo; -import android.content.res.AssetManager; import android.graphics.Point; import android.graphics.Rect; import android.net.Uri; @@ -46,12 +45,10 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; -import android.util.SparseArray; import android.view.Display; import android.view.DisplayCutout; import android.view.WindowInsets; -import java.io.IOException; import java.util.List; import java.util.Locale; @@ -60,7 +57,6 @@ import java.util.Locale; public class GodotIO { private static final String TAG = GodotIO.class.getSimpleName(); - private final AssetManager am; private final Activity activity; private final String uniqueId; GodotEditText edit; @@ -73,100 +69,8 @@ public class GodotIO { final int SCREEN_SENSOR_PORTRAIT = 5; final int SCREEN_SENSOR = 6; - ///////////////////////// - /// DIRECTORIES - ///////////////////////// - - static class AssetDir { - public String[] files; - public int current; - public String path; - } - - private int last_dir_id = 1; - - private final SparseArray<AssetDir> dirs; - - public int dir_open(String path) { - AssetDir ad = new AssetDir(); - ad.current = 0; - ad.path = path; - - try { - ad.files = am.list(path); - // no way to find path is directory or file exactly. - // but if ad.files.length==0, then it's an empty directory or file. - if (ad.files.length == 0) { - return -1; - } - } catch (IOException e) { - System.out.printf("Exception on dir_open: %s\n", e); - return -1; - } - - ++last_dir_id; - dirs.put(last_dir_id, ad); - - return last_dir_id; - } - - public boolean dir_is_dir(int id) { - if (dirs.get(id) == null) { - System.out.printf("dir_next: invalid dir id: %d\n", id); - return false; - } - AssetDir ad = dirs.get(id); - //System.out.printf("go next: %d,%d\n",ad.current,ad.files.length); - int idx = ad.current; - if (idx > 0) - idx--; - - if (idx >= ad.files.length) - return false; - String fname = ad.files[idx]; - - try { - if (ad.path.equals("")) - am.open(fname); - else - am.open(ad.path + "/" + fname); - return false; - } catch (Exception e) { - return true; - } - } - - public String dir_next(int id) { - if (dirs.get(id) == null) { - System.out.printf("dir_next: invalid dir id: %d\n", id); - return ""; - } - - AssetDir ad = dirs.get(id); - //System.out.printf("go next: %d,%d\n",ad.current,ad.files.length); - - if (ad.current >= ad.files.length) { - ad.current++; - return ""; - } - String r = ad.files[ad.current]; - ad.current++; - return r; - } - - public void dir_close(int id) { - if (dirs.get(id) == null) { - System.out.printf("dir_close: invalid dir id: %d\n", id); - return; - } - - dirs.remove(id); - } - GodotIO(Activity p_activity) { - am = p_activity.getAssets(); activity = p_activity; - dirs = new SparseArray<>(); String androidId = Settings.Secure.getString(activity.getContentResolver(), Settings.Secure.ANDROID_ID); if (androidId == null) { diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java index 3182ab0666..e2ae62d9cf 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java @@ -31,8 +31,13 @@ package org.godotengine.godot; import org.godotengine.godot.gl.GodotRenderer; +import org.godotengine.godot.io.directory.DirectoryAccessHandler; +import org.godotengine.godot.io.file.FileAccessHandler; +import org.godotengine.godot.tts.GodotTTS; +import org.godotengine.godot.utils.GodotNetUtils; import android.app.Activity; +import android.content.res.AssetManager; import android.hardware.SensorEvent; import android.view.Surface; @@ -42,8 +47,6 @@ import javax.microedition.khronos.opengles.GL10; * Wrapper for native library */ public class GodotLib { - public static GodotIO io; - static { System.loadLibrary("godot_android"); } @@ -51,7 +54,15 @@ public class GodotLib { /** * Invoked on the main thread to initialize Godot native layer. */ - public static native void initialize(Activity activity, Godot p_instance, Object p_asset_manager, boolean use_apk_expansion); + public static native void initialize(Activity activity, + Godot p_instance, + AssetManager p_asset_manager, + GodotIO godotIO, + GodotNetUtils netUtils, + DirectoryAccessHandler directoryAccessHandler, + FileAccessHandler fileAccessHandler, + boolean use_apk_expansion, + GodotTTS tts); /** * Invoked on the main thread to clean up Godot native layer. diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt b/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt new file mode 100644 index 0000000000..c7bd55b620 --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/StorageScope.kt @@ -0,0 +1,114 @@ +/*************************************************************************/ +/* StorageScope.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io + +import android.content.Context +import android.os.Build +import android.os.Environment +import java.io.File + +/** + * Represents the different storage scopes. + */ +internal enum class StorageScope { + /** + * Covers internal and external directories accessible to the app without restrictions. + */ + APP, + + /** + * Covers shared directories (from Android 10 and higher). + */ + SHARED, + + /** + * Everything else.. + */ + UNKNOWN; + + companion object { + /** + * Determines which [StorageScope] the given path falls under. + */ + fun getStorageScope(context: Context, path: String?): StorageScope { + if (path == null) { + return UNKNOWN + } + + val pathFile = File(path) + if (!pathFile.isAbsolute) { + return UNKNOWN + } + + val canonicalPathFile = pathFile.canonicalPath + + val internalAppDir = context.filesDir.canonicalPath ?: return UNKNOWN + if (canonicalPathFile.startsWith(internalAppDir)) { + return APP + } + + val internalCacheDir = context.cacheDir.canonicalPath ?: return UNKNOWN + if (canonicalPathFile.startsWith(internalCacheDir)) { + return APP + } + + val externalAppDir = context.getExternalFilesDir(null)?.canonicalPath ?: return UNKNOWN + if (canonicalPathFile.startsWith(externalAppDir)) { + return APP + } + + val sharedDir = Environment.getExternalStorageDirectory().canonicalPath ?: return UNKNOWN + if (canonicalPathFile.startsWith(sharedDir)) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + // Before R, apps had access to shared storage so long as they have the right + // permissions (and flag on Q). + return APP + } + + // Post R, access is limited based on the target destination + // 'Downloads' and 'Documents' are still accessible + val downloadsSharedDir = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).canonicalPath + ?: return SHARED + val documentsSharedDir = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).canonicalPath + ?: return SHARED + if (canonicalPathFile.startsWith(downloadsSharedDir) || canonicalPathFile.startsWith(documentsSharedDir)) { + return APP + } + + return SHARED + } + + return UNKNOWN + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt b/platform/android/java/lib/src/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt new file mode 100644 index 0000000000..098b10ae36 --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/directory/AssetsDirectoryAccess.kt @@ -0,0 +1,177 @@ +/*************************************************************************/ +/* AssetsDirectoryAccess.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.directory + +import android.content.Context +import android.util.Log +import android.util.SparseArray +import org.godotengine.godot.io.directory.DirectoryAccessHandler.Companion.INVALID_DIR_ID +import org.godotengine.godot.io.directory.DirectoryAccessHandler.Companion.STARTING_DIR_ID +import java.io.File +import java.io.IOException + +/** + * Handles directories access within the Android assets directory. + */ +internal class AssetsDirectoryAccess(context: Context) : DirectoryAccessHandler.DirectoryAccess { + + companion object { + private val TAG = AssetsDirectoryAccess::class.java.simpleName + } + + private data class AssetDir(val path: String, val files: Array<String>, var current: Int = 0) + + private val assetManager = context.assets + + private var lastDirId = STARTING_DIR_ID + private val dirs = SparseArray<AssetDir>() + + private fun getAssetsPath(originalPath: String): String { + if (originalPath.startsWith(File.separatorChar)) { + return originalPath.substring(1) + } + return originalPath + } + + override fun hasDirId(dirId: Int) = dirs.indexOfKey(dirId) >= 0 + + override fun dirOpen(path: String): Int { + val assetsPath = getAssetsPath(path) ?: return INVALID_DIR_ID + try { + val files = assetManager.list(assetsPath) ?: return INVALID_DIR_ID + // Empty directories don't get added to the 'assets' directory, so + // if ad.files.length > 0 ==> path is directory + // if ad.files.length == 0 ==> path is file + if (files.isEmpty()) { + return INVALID_DIR_ID + } + + val ad = AssetDir(assetsPath, files) + + dirs.put(++lastDirId, ad) + return lastDirId + } catch (e: IOException) { + Log.e(TAG, "Exception on dirOpen", e) + return INVALID_DIR_ID + } + } + + override fun dirExists(path: String): Boolean { + val assetsPath = getAssetsPath(path) + try { + val files = assetManager.list(assetsPath) ?: return false + // Empty directories don't get added to the 'assets' directory, so + // if ad.files.length > 0 ==> path is directory + // if ad.files.length == 0 ==> path is file + return files.isNotEmpty() + } catch (e: IOException) { + Log.e(TAG, "Exception on dirExists", e) + return false + } + } + + override fun fileExists(path: String): Boolean { + val assetsPath = getAssetsPath(path) ?: return false + try { + val files = assetManager.list(assetsPath) ?: return false + // Empty directories don't get added to the 'assets' directory, so + // if ad.files.length > 0 ==> path is directory + // if ad.files.length == 0 ==> path is file + return files.isEmpty() + } catch (e: IOException) { + Log.e(TAG, "Exception on fileExists", e) + return false + } + } + + override fun dirIsDir(dirId: Int): Boolean { + val ad: AssetDir = dirs[dirId] + + var idx = ad.current + if (idx > 0) { + idx-- + } + + if (idx >= ad.files.size) { + return false + } + + val fileName = ad.files[idx] + // List the contents of $fileName. If it's a file, it will be empty, otherwise it'll be a + // directory + val filePath = if (ad.path == "") fileName else "${ad.path}/${fileName}" + val fileContents = assetManager.list(filePath) + return (fileContents?.size?: 0) > 0 + } + + override fun isCurrentHidden(dirId: Int): Boolean { + val ad = dirs[dirId] + + var idx = ad.current + if (idx > 0) { + idx-- + } + + if (idx >= ad.files.size) { + return false + } + + val fileName = ad.files[idx] + return fileName.startsWith('.') + } + + override fun dirNext(dirId: Int): String { + val ad: AssetDir = dirs[dirId] + + if (ad.current >= ad.files.size) { + ad.current++ + return "" + } + + return ad.files[ad.current++] + } + + override fun dirClose(dirId: Int) { + dirs.remove(dirId) + } + + override fun getDriveCount() = 0 + + override fun getDrive(drive: Int) = "" + + override fun makeDir(dir: String) = false + + override fun getSpaceLeft() = 0L + + override fun rename(from: String, to: String) = false + + override fun remove(filename: String) = false +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt b/platform/android/java/lib/src/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt new file mode 100644 index 0000000000..fedcf4843f --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/directory/DirectoryAccessHandler.kt @@ -0,0 +1,224 @@ +/*************************************************************************/ +/* DirectoryAccessHandler.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.directory + +import android.content.Context +import android.util.Log +import org.godotengine.godot.io.directory.DirectoryAccessHandler.AccessType.ACCESS_FILESYSTEM +import org.godotengine.godot.io.directory.DirectoryAccessHandler.AccessType.ACCESS_RESOURCES + +/** + * Handles files and directories access and manipulation for the Android platform + */ +class DirectoryAccessHandler(context: Context) { + + companion object { + private val TAG = DirectoryAccessHandler::class.java.simpleName + + internal const val INVALID_DIR_ID = -1 + internal const val STARTING_DIR_ID = 1 + + private fun getAccessTypeFromNative(accessType: Int): AccessType? { + return when (accessType) { + ACCESS_RESOURCES.nativeValue -> ACCESS_RESOURCES + ACCESS_FILESYSTEM.nativeValue -> ACCESS_FILESYSTEM + else -> null + } + } + } + + private enum class AccessType(val nativeValue: Int) { + ACCESS_RESOURCES(0), ACCESS_FILESYSTEM(2) + } + + internal interface DirectoryAccess { + fun dirOpen(path: String): Int + fun dirNext(dirId: Int): String + fun dirClose(dirId: Int) + fun dirIsDir(dirId: Int): Boolean + fun dirExists(path: String): Boolean + fun fileExists(path: String): Boolean + fun hasDirId(dirId: Int): Boolean + fun isCurrentHidden(dirId: Int): Boolean + fun getDriveCount() : Int + fun getDrive(drive: Int): String + fun makeDir(dir: String): Boolean + fun getSpaceLeft(): Long + fun rename(from: String, to: String): Boolean + fun remove(filename: String): Boolean + } + + private val assetsDirAccess = AssetsDirectoryAccess(context) + private val fileSystemDirAccess = FilesystemDirectoryAccess(context) + + private fun hasDirId(accessType: AccessType, dirId: Int): Boolean { + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.hasDirId(dirId) + ACCESS_FILESYSTEM -> fileSystemDirAccess.hasDirId(dirId) + } + } + + fun dirOpen(nativeAccessType: Int, path: String?): Int { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (path == null || accessType == null) { + return INVALID_DIR_ID + } + + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.dirOpen(path) + ACCESS_FILESYSTEM -> fileSystemDirAccess.dirOpen(path) + } + } + + fun dirNext(nativeAccessType: Int, dirId: Int): String { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (accessType == null || !hasDirId(accessType, dirId)) { + Log.w(TAG, "dirNext: Invalid dir id: $dirId") + return "" + } + + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.dirNext(dirId) + ACCESS_FILESYSTEM -> fileSystemDirAccess.dirNext(dirId) + } + } + + fun dirClose(nativeAccessType: Int, dirId: Int) { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (accessType == null || !hasDirId(accessType, dirId)) { + Log.w(TAG, "dirClose: Invalid dir id: $dirId") + return + } + + when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.dirClose(dirId) + ACCESS_FILESYSTEM -> fileSystemDirAccess.dirClose(dirId) + } + } + + fun dirIsDir(nativeAccessType: Int, dirId: Int): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (accessType == null || !hasDirId(accessType, dirId)) { + Log.w(TAG, "dirIsDir: Invalid dir id: $dirId") + return false + } + + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.dirIsDir(dirId) + ACCESS_FILESYSTEM -> fileSystemDirAccess.dirIsDir(dirId) + } + } + + fun isCurrentHidden(nativeAccessType: Int, dirId: Int): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (accessType == null || !hasDirId(accessType, dirId)) { + return false + } + + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.isCurrentHidden(dirId) + ACCESS_FILESYSTEM -> fileSystemDirAccess.isCurrentHidden(dirId) + } + } + + fun dirExists(nativeAccessType: Int, path: String?): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (path == null || accessType == null) { + return false + } + + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.dirExists(path) + ACCESS_FILESYSTEM -> fileSystemDirAccess.dirExists(path) + } + } + + fun fileExists(nativeAccessType: Int, path: String?): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) + if (path == null || accessType == null) { + return false + } + + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.fileExists(path) + ACCESS_FILESYSTEM -> fileSystemDirAccess.fileExists(path) + } + } + + fun getDriveCount(nativeAccessType: Int): Int { + val accessType = getAccessTypeFromNative(nativeAccessType) ?: return 0 + return when(accessType) { + ACCESS_RESOURCES -> assetsDirAccess.getDriveCount() + ACCESS_FILESYSTEM -> fileSystemDirAccess.getDriveCount() + } + } + + fun getDrive(nativeAccessType: Int, drive: Int): String { + val accessType = getAccessTypeFromNative(nativeAccessType) ?: return "" + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.getDrive(drive) + ACCESS_FILESYSTEM -> fileSystemDirAccess.getDrive(drive) + } + } + + fun makeDir(nativeAccessType: Int, dir: String): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) ?: return false + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.makeDir(dir) + ACCESS_FILESYSTEM -> fileSystemDirAccess.makeDir(dir) + } + } + + fun getSpaceLeft(nativeAccessType: Int): Long { + val accessType = getAccessTypeFromNative(nativeAccessType) ?: return 0L + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.getSpaceLeft() + ACCESS_FILESYSTEM -> fileSystemDirAccess.getSpaceLeft() + } + } + + fun rename(nativeAccessType: Int, from: String, to: String): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) ?: return false + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.rename(from, to) + ACCESS_FILESYSTEM -> fileSystemDirAccess.rename(from, to) + } + } + + fun remove(nativeAccessType: Int, filename: String): Boolean { + val accessType = getAccessTypeFromNative(nativeAccessType) ?: return false + return when (accessType) { + ACCESS_RESOURCES -> assetsDirAccess.remove(filename) + ACCESS_FILESYSTEM -> fileSystemDirAccess.remove(filename) + } + } + +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt b/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt new file mode 100644 index 0000000000..c3acf42568 --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/directory/FilesystemDirectoryAccess.kt @@ -0,0 +1,230 @@ +/*************************************************************************/ +/* FileSystemDirectoryAccess.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.directory + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Build +import android.os.storage.StorageManager +import android.util.Log +import android.util.SparseArray +import org.godotengine.godot.io.StorageScope +import org.godotengine.godot.io.directory.DirectoryAccessHandler.Companion.INVALID_DIR_ID +import org.godotengine.godot.io.directory.DirectoryAccessHandler.Companion.STARTING_DIR_ID +import org.godotengine.godot.io.file.FileAccessHandler +import java.io.File + +/** + * Handles directories access with the internal and external filesystem. + */ +internal class FilesystemDirectoryAccess(private val context: Context): + DirectoryAccessHandler.DirectoryAccess { + + companion object { + private val TAG = FilesystemDirectoryAccess::class.java.simpleName + } + + private data class DirData(val dirFile: File, val files: Array<File>, var current: Int = 0) + + private val storageManager = context.getSystemService(Context.STORAGE_SERVICE) as StorageManager + private var lastDirId = STARTING_DIR_ID + private val dirs = SparseArray<DirData>() + + private fun inScope(path: String): Boolean { + // Directory access is available for shared storage on Android 11+ + // On Android 10, access is also available as long as the `requestLegacyExternalStorage` + // tag is available. + return StorageScope.getStorageScope(context, path) != StorageScope.UNKNOWN + } + + override fun hasDirId(dirId: Int) = dirs.indexOfKey(dirId) >= 0 + + override fun dirOpen(path: String): Int { + if (!inScope(path)) { + Log.w(TAG, "Path $path is not accessible.") + return INVALID_DIR_ID + } + + // Check this is a directory. + val dirFile = File(path) + if (!dirFile.isDirectory) { + return INVALID_DIR_ID + } + + // Get the files in the directory + val files = dirFile.listFiles()?: return INVALID_DIR_ID + + // Create the data representing this directory + val dirData = DirData(dirFile, files) + + dirs.put(++lastDirId, dirData) + return lastDirId + } + + override fun dirExists(path: String): Boolean { + if (!inScope(path)) { + Log.w(TAG, "Path $path is not accessible.") + return false + } + + try { + return File(path).isDirectory + } catch (e: SecurityException) { + return false + } + } + + override fun fileExists(path: String) = FileAccessHandler.fileExists(context, path) + + override fun dirNext(dirId: Int): String { + val dirData = dirs[dirId] + if (dirData.current >= dirData.files.size) { + dirData.current++ + return "" + } + + return dirData.files[dirData.current++].name + } + + override fun dirClose(dirId: Int) { + dirs.remove(dirId) + } + + override fun dirIsDir(dirId: Int): Boolean { + val dirData = dirs[dirId] + + var index = dirData.current + if (index > 0) { + index-- + } + + if (index >= dirData.files.size) { + return false + } + + return dirData.files[index].isDirectory + } + + override fun isCurrentHidden(dirId: Int): Boolean { + val dirData = dirs[dirId] + + var index = dirData.current + if (index > 0) { + index-- + } + + if (index >= dirData.files.size) { + return false + } + + return dirData.files[index].isHidden + } + + override fun getDriveCount(): Int { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + storageManager.storageVolumes.size + } else { + 0 + } + } + + override fun getDrive(drive: Int): String { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + return "" + } + + if (drive < 0 || drive >= storageManager.storageVolumes.size) { + return "" + } + + val storageVolume = storageManager.storageVolumes[drive] + return storageVolume.getDescription(context) + } + + override fun makeDir(dir: String): Boolean { + if (!inScope(dir)) { + Log.w(TAG, "Directory $dir is not accessible.") + return false + } + + try { + val dirFile = File(dir) + return dirFile.isDirectory || dirFile.mkdirs() + } catch (e: SecurityException) { + return false + } + } + + @SuppressLint("UsableSpace") + override fun getSpaceLeft() = context.getExternalFilesDir(null)?.usableSpace ?: 0L + + override fun rename(from: String, to: String): Boolean { + if (!inScope(from) || !inScope(to)) { + Log.w(TAG, "Argument filenames are not accessible:\n" + + "from: $from\n" + + "to: $to") + return false + } + + return try { + val fromFile = File(from) + if (fromFile.isDirectory) { + fromFile.renameTo(File(to)) + } else { + FileAccessHandler.renameFile(context, from, to) + } + } catch (e: SecurityException) { + false + } + } + + override fun remove(filename: String): Boolean { + if (!inScope(filename)) { + Log.w(TAG, "Filename $filename is not accessible.") + return false + } + + return try { + val deleteFile = File(filename) + if (deleteFile.exists()) { + if (deleteFile.isDirectory) { + deleteFile.delete() + } else { + FileAccessHandler.removeFile(context, filename) + } + } else { + true + } + } catch (e: SecurityException) { + false + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt new file mode 100644 index 0000000000..aef1bed8ce --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt @@ -0,0 +1,186 @@ +/*************************************************************************/ +/* DataAccess.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.file + +import android.content.Context +import android.os.Build +import android.util.Log +import org.godotengine.godot.io.StorageScope +import java.io.IOException +import java.nio.ByteBuffer +import java.nio.channels.FileChannel +import kotlin.math.max + +/** + * Base class for file IO operations. + * + * Its derived instances provide concrete implementations to handle regular file access, as well + * as file access through the media store API on versions of Android were scoped storage is enabled. + */ +internal abstract class DataAccess(private val filePath: String) { + + companion object { + private val TAG = DataAccess::class.java.simpleName + + fun generateDataAccess( + storageScope: StorageScope, + context: Context, + filePath: String, + accessFlag: FileAccessFlags + ): DataAccess? { + return when (storageScope) { + StorageScope.APP -> FileData(filePath, accessFlag) + + StorageScope.SHARED -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + MediaStoreData(context, filePath, accessFlag) + } else { + null + } + + StorageScope.UNKNOWN -> null + } + } + + fun fileExists(storageScope: StorageScope, context: Context, path: String): Boolean { + return when(storageScope) { + StorageScope.APP -> FileData.fileExists(path) + StorageScope.SHARED -> MediaStoreData.fileExists(context, path) + StorageScope.UNKNOWN -> false + } + } + + fun fileLastModified(storageScope: StorageScope, context: Context, path: String): Long { + return when(storageScope) { + StorageScope.APP -> FileData.fileLastModified(path) + StorageScope.SHARED -> MediaStoreData.fileLastModified(context, path) + StorageScope.UNKNOWN -> 0L + } + } + + fun removeFile(storageScope: StorageScope, context: Context, path: String): Boolean { + return when(storageScope) { + StorageScope.APP -> FileData.delete(path) + StorageScope.SHARED -> MediaStoreData.delete(context, path) + StorageScope.UNKNOWN -> false + } + } + + fun renameFile(storageScope: StorageScope, context: Context, from: String, to: String): Boolean { + return when(storageScope) { + StorageScope.APP -> FileData.rename(from, to) + StorageScope.SHARED -> MediaStoreData.rename(context, from, to) + StorageScope.UNKNOWN -> false + } + } + } + + protected abstract val fileChannel: FileChannel + internal var endOfFile = false + private set + + fun close() { + try { + fileChannel.close() + } catch (e: IOException) { + Log.w(TAG, "Exception when closing file $filePath.", e) + } + } + + fun flush() { + try { + fileChannel.force(false) + } catch (e: IOException) { + Log.w(TAG, "Exception when flushing file $filePath.", e) + } + } + + fun seek(position: Long) { + try { + fileChannel.position(position) + if (position <= size()) { + endOfFile = false + } + } catch (e: Exception) { + Log.w(TAG, "Exception when seeking file $filePath.", e) + } + } + + fun seekFromEnd(positionFromEnd: Long) { + val positionFromBeginning = max(0, size() - positionFromEnd) + seek(positionFromBeginning) + } + + fun position(): Long { + return try { + fileChannel.position() + } catch (e: IOException) { + Log.w( + TAG, + "Exception when retrieving position for file $filePath.", + e + ) + 0L + } + } + + fun size() = try { + fileChannel.size() + } catch (e: IOException) { + Log.w(TAG, "Exception when retrieving size for file $filePath.", e) + 0L + } + + fun read(buffer: ByteBuffer): Int { + return try { + val readBytes = fileChannel.read(buffer) + if (readBytes == -1) { + endOfFile = true + 0 + } else { + readBytes + } + } catch (e: IOException) { + Log.w(TAG, "Exception while reading from file $filePath.", e) + 0 + } + } + + fun write(buffer: ByteBuffer) { + try { + val writtenBytes = fileChannel.write(buffer) + if (writtenBytes > 0) { + endOfFile = false + } + } catch (e: IOException) { + Log.w(TAG, "Exception while writing to file $filePath.", e) + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessFlags.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessFlags.kt new file mode 100644 index 0000000000..c6b242a4b6 --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessFlags.kt @@ -0,0 +1,87 @@ +/*************************************************************************/ +/* FileAccessFlags.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.file + +/** + * Android representation of Godot native access flags. + */ +internal enum class FileAccessFlags(val nativeValue: Int) { + /** + * Opens the file for read operations. + * The cursor is positioned at the beginning of the file. + */ + READ(1), + + /** + * Opens the file for write operations. + * The file is created if it does not exist, and truncated if it does. + */ + WRITE(2), + + /** + * Opens the file for read and write operations. + * Does not truncate the file. The cursor is positioned at the beginning of the file. + */ + READ_WRITE(3), + + /** + * Opens the file for read and write operations. + * The file is created if it does not exist, and truncated if it does. + * The cursor is positioned at the beginning of the file. + */ + WRITE_READ(7); + + fun getMode(): String { + return when (this) { + READ -> "r" + WRITE -> "w" + READ_WRITE, WRITE_READ -> "rw" + } + } + + fun shouldTruncate(): Boolean { + return when (this) { + READ, READ_WRITE -> false + WRITE, WRITE_READ -> true + } + } + + companion object { + fun fromNativeModeFlags(modeFlag: Int): FileAccessFlags? { + for (flag in values()) { + if (flag.nativeValue == modeFlag) { + return flag + } + } + return null + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt new file mode 100644 index 0000000000..a4e0a82d6e --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt @@ -0,0 +1,202 @@ +/*************************************************************************/ +/* FileAccessHandler.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.file + +import android.content.Context +import android.util.Log +import android.util.SparseArray +import org.godotengine.godot.io.StorageScope +import java.io.FileNotFoundException +import java.nio.ByteBuffer + +/** + * Handles regular and media store file access and interactions. + */ +class FileAccessHandler(val context: Context) { + + companion object { + private val TAG = FileAccessHandler::class.java.simpleName + + private const val FILE_NOT_FOUND_ERROR_ID = -1 + private const val INVALID_FILE_ID = 0 + private const val STARTING_FILE_ID = 1 + + fun fileExists(context: Context, path: String?): Boolean { + val storageScope = StorageScope.getStorageScope(context, path) + if (storageScope == StorageScope.UNKNOWN) { + return false + } + + return try { + DataAccess.fileExists(storageScope, context, path!!) + } catch (e: SecurityException) { + false + } + } + + fun removeFile(context: Context, path: String?): Boolean { + val storageScope = StorageScope.getStorageScope(context, path) + if (storageScope == StorageScope.UNKNOWN) { + return false + } + + return try { + DataAccess.removeFile(storageScope, context, path!!) + } catch (e: Exception) { + false + } + } + + fun renameFile(context: Context, from: String?, to: String?): Boolean { + val storageScope = StorageScope.getStorageScope(context, from) + if (storageScope == StorageScope.UNKNOWN) { + return false + } + + return try { + DataAccess.renameFile(storageScope, context, from!!, to!!) + } catch (e: Exception) { + false + } + } + } + + private val files = SparseArray<DataAccess>() + private var lastFileId = STARTING_FILE_ID + + private fun hasFileId(fileId: Int) = files.indexOfKey(fileId) >= 0 + + fun fileOpen(path: String?, modeFlags: Int): Int { + val storageScope = StorageScope.getStorageScope(context, path) + if (storageScope == StorageScope.UNKNOWN) { + return INVALID_FILE_ID + } + + try { + val accessFlag = FileAccessFlags.fromNativeModeFlags(modeFlags) ?: return INVALID_FILE_ID + val dataAccess = DataAccess.generateDataAccess(storageScope, context, path!!, accessFlag) ?: return INVALID_FILE_ID + + files.put(++lastFileId, dataAccess) + return lastFileId + } catch (e: FileNotFoundException) { + return FILE_NOT_FOUND_ERROR_ID + } catch (e: Exception) { + Log.w(TAG, "Error while opening $path", e) + return INVALID_FILE_ID + } + } + + fun fileGetSize(fileId: Int): Long { + if (!hasFileId(fileId)) { + return 0L + } + + return files[fileId].size() + } + + fun fileSeek(fileId: Int, position: Long) { + if (!hasFileId(fileId)) { + return + } + + files[fileId].seek(position) + } + + fun fileSeekFromEnd(fileId: Int, position: Long) { + if (!hasFileId(fileId)) { + return + } + + files[fileId].seekFromEnd(position) + } + + fun fileRead(fileId: Int, byteBuffer: ByteBuffer?): Int { + if (!hasFileId(fileId) || byteBuffer == null) { + return 0 + } + + return files[fileId].read(byteBuffer) + } + + fun fileWrite(fileId: Int, byteBuffer: ByteBuffer?) { + if (!hasFileId(fileId) || byteBuffer == null) { + return + } + + files[fileId].write(byteBuffer) + } + + fun fileFlush(fileId: Int) { + if (!hasFileId(fileId)) { + return + } + + files[fileId].flush() + } + + fun fileExists(path: String?) = Companion.fileExists(context, path) + + fun fileLastModified(filepath: String?): Long { + val storageScope = StorageScope.getStorageScope(context, filepath) + if (storageScope == StorageScope.UNKNOWN) { + return 0L + } + + return try { + DataAccess.fileLastModified(storageScope, context, filepath!!) + } catch (e: SecurityException) { + 0L + } + } + + fun fileGetPosition(fileId: Int): Long { + if (!hasFileId(fileId)) { + return 0L + } + + return files[fileId].position() + } + + fun isFileEof(fileId: Int): Boolean { + if (!hasFileId(fileId)) { + return false + } + + return files[fileId].endOfFile + } + + fun fileClose(fileId: Int) { + if (hasFileId(fileId)) { + files[fileId].close() + files.remove(fileId) + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileData.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileData.kt new file mode 100644 index 0000000000..5af694ad99 --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileData.kt @@ -0,0 +1,93 @@ +/*************************************************************************/ +/* FileData.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.file + +import java.io.File +import java.io.FileOutputStream +import java.io.RandomAccessFile +import java.nio.channels.FileChannel + +/** + * Implementation of [DataAccess] which handles regular (not scoped) file access and interactions. + */ +internal class FileData(filePath: String, accessFlag: FileAccessFlags) : DataAccess(filePath) { + + companion object { + private val TAG = FileData::class.java.simpleName + + fun fileExists(path: String): Boolean { + return try { + File(path).isFile + } catch (e: SecurityException) { + false + } + } + + fun fileLastModified(filepath: String): Long { + return try { + File(filepath).lastModified() + } catch (e: SecurityException) { + 0L + } + } + + fun delete(filepath: String): Boolean { + return try { + File(filepath).delete() + } catch (e: Exception) { + false + } + } + + fun rename(from: String, to: String): Boolean { + return try { + val fromFile = File(from) + fromFile.renameTo(File(to)) + } catch (e: Exception) { + false + } + } + } + + override val fileChannel: FileChannel + + init { + if (accessFlag == FileAccessFlags.WRITE) { + fileChannel = FileOutputStream(filePath, !accessFlag.shouldTruncate()).channel + } else { + fileChannel = RandomAccessFile(filePath, accessFlag.getMode()).channel + } + + if (accessFlag.shouldTruncate()) { + fileChannel.truncate(0) + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/MediaStoreData.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/MediaStoreData.kt new file mode 100644 index 0000000000..81a7dd1705 --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/MediaStoreData.kt @@ -0,0 +1,284 @@ +/*************************************************************************/ +/* MediaStoreData.kt */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +package org.godotengine.godot.io.file + +import android.content.ContentUris +import android.content.ContentValues +import android.content.Context +import android.database.Cursor +import android.net.Uri +import android.os.Build +import android.os.Environment +import android.provider.MediaStore +import androidx.annotation.RequiresApi + +import java.io.File +import java.io.FileInputStream +import java.io.FileNotFoundException +import java.io.FileOutputStream +import java.nio.channels.FileChannel + +/** + * Implementation of [DataAccess] which handles access and interactions with file and data + * under scoped storage via the MediaStore API. + */ +@RequiresApi(Build.VERSION_CODES.Q) +internal class MediaStoreData(context: Context, filePath: String, accessFlag: FileAccessFlags) : + DataAccess(filePath) { + + private data class DataItem( + val id: Long, + val uri: Uri, + val displayName: String, + val relativePath: String, + val size: Int, + val dateModified: Int, + val mediaType: Int + ) + + companion object { + private val TAG = MediaStoreData::class.java.simpleName + + private val COLLECTION = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) + + private val PROJECTION = arrayOf( + MediaStore.Files.FileColumns._ID, + MediaStore.Files.FileColumns.DISPLAY_NAME, + MediaStore.Files.FileColumns.RELATIVE_PATH, + MediaStore.Files.FileColumns.SIZE, + MediaStore.Files.FileColumns.DATE_MODIFIED, + MediaStore.Files.FileColumns.MEDIA_TYPE, + ) + + private const val SELECTION_BY_PATH = "${MediaStore.Files.FileColumns.DISPLAY_NAME} = ? " + + " AND ${MediaStore.Files.FileColumns.RELATIVE_PATH} = ?" + + private fun getSelectionByPathArguments(path: String): Array<String> { + return arrayOf(getMediaStoreDisplayName(path), getMediaStoreRelativePath(path)) + } + + private const val SELECTION_BY_ID = "${MediaStore.Files.FileColumns._ID} = ? " + + private fun getSelectionByIdArgument(id: Long) = arrayOf(id.toString()) + + private fun getMediaStoreDisplayName(path: String) = File(path).name + + private fun getMediaStoreRelativePath(path: String): String { + val pathFile = File(path) + val environmentDir = Environment.getExternalStorageDirectory() + var relativePath = (pathFile.parent?.replace(environmentDir.absolutePath, "") ?: "").trim('/') + if (relativePath.isNotBlank()) { + relativePath += "/" + } + return relativePath + } + + private fun queryById(context: Context, id: Long): List<DataItem> { + val query = context.contentResolver.query( + COLLECTION, + PROJECTION, + SELECTION_BY_ID, + getSelectionByIdArgument(id), + null + ) + return dataItemFromCursor(query) + } + + private fun queryByPath(context: Context, path: String): List<DataItem> { + val query = context.contentResolver.query( + COLLECTION, + PROJECTION, + SELECTION_BY_PATH, + getSelectionByPathArguments(path), + null + ) + return dataItemFromCursor(query) + } + + private fun dataItemFromCursor(query: Cursor?): List<DataItem> { + query?.use { cursor -> + cursor.count + if (cursor.count == 0) { + return emptyList() + } + val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID) + val displayNameColumn = + cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME) + val relativePathColumn = + cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.RELATIVE_PATH) + val sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE) + val dateModifiedColumn = + cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_MODIFIED) + val mediaTypeColumn = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MEDIA_TYPE) + + val result = ArrayList<DataItem>() + while (cursor.moveToNext()) { + val id = cursor.getLong(idColumn) + result.add( + DataItem( + id, + ContentUris.withAppendedId(COLLECTION, id), + cursor.getString(displayNameColumn), + cursor.getString(relativePathColumn), + cursor.getInt(sizeColumn), + cursor.getInt(dateModifiedColumn), + cursor.getInt(mediaTypeColumn) + ) + ) + } + return result + } + return emptyList() + } + + private fun addFile(context: Context, path: String): DataItem? { + val fileDetails = ContentValues().apply { + put(MediaStore.Files.FileColumns._ID, 0) + put(MediaStore.Files.FileColumns.DISPLAY_NAME, getMediaStoreDisplayName(path)) + put(MediaStore.Files.FileColumns.RELATIVE_PATH, getMediaStoreRelativePath(path)) + } + + context.contentResolver.insert(COLLECTION, fileDetails) ?: return null + + // File was successfully added, let's retrieve its info + val infos = queryByPath(context, path) + if (infos.isEmpty()) { + return null + } + + return infos[0] + } + + fun delete(context: Context, path: String): Boolean { + val itemsToDelete = queryByPath(context, path) + if (itemsToDelete.isEmpty()) { + return false + } + + val resolver = context.contentResolver + var itemsDeleted = 0 + for (item in itemsToDelete) { + itemsDeleted += resolver.delete(item.uri, null, null) + } + + return itemsDeleted > 0 + } + + fun fileExists(context: Context, path: String): Boolean { + return queryByPath(context, path).isNotEmpty() + } + + fun fileLastModified(context: Context, path: String): Long { + val result = queryByPath(context, path) + if (result.isEmpty()) { + return 0L + } + + val dataItem = result[0] + return dataItem.dateModified.toLong() + } + + fun rename(context: Context, from: String, to: String): Boolean { + // Ensure the source exists. + val sources = queryByPath(context, from) + if (sources.isEmpty()) { + return false + } + + // Take the first source + val source = sources[0] + + // Set up the updated values + val updatedDetails = ContentValues().apply { + put(MediaStore.Files.FileColumns.DISPLAY_NAME, getMediaStoreDisplayName(to)) + put(MediaStore.Files.FileColumns.RELATIVE_PATH, getMediaStoreRelativePath(to)) + } + + val updated = context.contentResolver.update( + source.uri, + updatedDetails, + SELECTION_BY_ID, + getSelectionByIdArgument(source.id) + ) + return updated > 0 + } + } + + private val id: Long + private val uri: Uri + override val fileChannel: FileChannel + + init { + val contentResolver = context.contentResolver + val dataItems = queryByPath(context, filePath) + + val dataItem = when (accessFlag) { + FileAccessFlags.READ -> { + // The file should already exist + if (dataItems.isEmpty()) { + throw FileNotFoundException("Unable to access file $filePath") + } + + val dataItem = dataItems[0] + dataItem + } + + FileAccessFlags.WRITE, FileAccessFlags.READ_WRITE, FileAccessFlags.WRITE_READ -> { + // Create the file if it doesn't exist + val dataItem = if (dataItems.isEmpty()) { + addFile(context, filePath) + } else { + dataItems[0] + } + + if (dataItem == null) { + throw FileNotFoundException("Unable to access file $filePath") + } + dataItem + } + } + + id = dataItem.id + uri = dataItem.uri + + val parcelFileDescriptor = contentResolver.openFileDescriptor(uri, accessFlag.getMode()) + ?: throw IllegalStateException("Unable to access file descriptor") + fileChannel = if (accessFlag == FileAccessFlags.READ) { + FileInputStream(parcelFileDescriptor.fileDescriptor).channel + } else { + FileOutputStream(parcelFileDescriptor.fileDescriptor).channel + } + + if (accessFlag.shouldTruncate()) { + fileChannel.truncate(0) + } + } +} diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java b/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java index e5b4f41153..57db0709f0 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java @@ -32,10 +32,14 @@ package org.godotengine.godot.utils; import android.Manifest; import android.app.Activity; +import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionInfo; +import android.net.Uri; import android.os.Build; +import android.os.Environment; +import android.provider.Settings; import android.util.Log; import androidx.core.content.ContextCompat; @@ -53,7 +57,8 @@ public final class PermissionsUtil { static final int REQUEST_RECORD_AUDIO_PERMISSION = 1; static final int REQUEST_CAMERA_PERMISSION = 2; static final int REQUEST_VIBRATE_PERMISSION = 3; - static final int REQUEST_ALL_PERMISSION_REQ_CODE = 1001; + public static final int REQUEST_ALL_PERMISSION_REQ_CODE = 1001; + public static final int REQUEST_MANAGE_EXTERNAL_STORAGE_REQ_CODE = 2002; private PermissionsUtil() { } @@ -108,13 +113,26 @@ public final class PermissionsUtil { if (manifestPermissions.length == 0) return true; - List<String> dangerousPermissions = new ArrayList<>(); + List<String> requestedPermissions = new ArrayList<>(); for (String manifestPermission : manifestPermissions) { try { - PermissionInfo permissionInfo = getPermissionInfo(activity, manifestPermission); - int protectionLevel = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? permissionInfo.getProtection() : permissionInfo.protectionLevel; - if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS && ContextCompat.checkSelfPermission(activity, manifestPermission) != PackageManager.PERMISSION_GRANTED) { - dangerousPermissions.add(manifestPermission); + if (manifestPermission.equals(Manifest.permission.MANAGE_EXTERNAL_STORAGE)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) { + try { + Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + intent.setData(Uri.parse(String.format("package:%s", activity.getPackageName()))); + activity.startActivityForResult(intent, REQUEST_MANAGE_EXTERNAL_STORAGE_REQ_CODE); + } catch (Exception ignored) { + Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); + activity.startActivityForResult(intent, REQUEST_MANAGE_EXTERNAL_STORAGE_REQ_CODE); + } + } + } else { + PermissionInfo permissionInfo = getPermissionInfo(activity, manifestPermission); + int protectionLevel = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? permissionInfo.getProtection() : permissionInfo.protectionLevel; + if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS && ContextCompat.checkSelfPermission(activity, manifestPermission) != PackageManager.PERMISSION_GRANTED) { + requestedPermissions.add(manifestPermission); + } } } catch (PackageManager.NameNotFoundException e) { // Skip this permission and continue. @@ -122,13 +140,12 @@ public final class PermissionsUtil { } } - if (dangerousPermissions.isEmpty()) { + if (requestedPermissions.isEmpty()) { // If list is empty, all of dangerous permissions were granted. return true; } - String[] requestedPermissions = dangerousPermissions.toArray(new String[0]); - activity.requestPermissions(requestedPermissions, REQUEST_ALL_PERMISSION_REQ_CODE); + activity.requestPermissions(requestedPermissions.toArray(new String[0]), REQUEST_ALL_PERMISSION_REQ_CODE); return false; } @@ -148,13 +165,19 @@ public final class PermissionsUtil { if (manifestPermissions.length == 0) return manifestPermissions; - List<String> dangerousPermissions = new ArrayList<>(); + List<String> grantedPermissions = new ArrayList<>(); for (String manifestPermission : manifestPermissions) { try { - PermissionInfo permissionInfo = getPermissionInfo(activity, manifestPermission); - int protectionLevel = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? permissionInfo.getProtection() : permissionInfo.protectionLevel; - if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS && ContextCompat.checkSelfPermission(activity, manifestPermission) == PackageManager.PERMISSION_GRANTED) { - dangerousPermissions.add(manifestPermission); + if (manifestPermission.equals(Manifest.permission.MANAGE_EXTERNAL_STORAGE)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && Environment.isExternalStorageManager()) { + grantedPermissions.add(manifestPermission); + } + } else { + PermissionInfo permissionInfo = getPermissionInfo(activity, manifestPermission); + int protectionLevel = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? permissionInfo.getProtection() : permissionInfo.protectionLevel; + if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS && ContextCompat.checkSelfPermission(activity, manifestPermission) == PackageManager.PERMISSION_GRANTED) { + grantedPermissions.add(manifestPermission); + } } } catch (PackageManager.NameNotFoundException e) { // Skip this permission and continue. @@ -162,7 +185,7 @@ public final class PermissionsUtil { } } - return dangerousPermissions.toArray(new String[0]); + return grantedPermissions.toArray(new String[0]); } /** @@ -177,7 +200,7 @@ public final class PermissionsUtil { if (permission.equals(p)) return true; } - } catch (PackageManager.NameNotFoundException e) { + } catch (PackageManager.NameNotFoundException ignored) { } return false; diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index 6e716c34a6..f4de4acfad 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -43,6 +43,7 @@ #include "dir_access_jandroid.h" #include "display_server_android.h" #include "file_access_android.h" +#include "file_access_filesystem_jandroid.h" #include "jni_utils.h" #include "main/main.h" #include "net_socket_android.h" @@ -78,13 +79,13 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHei } } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jclass clazz, jobject activity, jobject godot_instance, jobject p_asset_manager, jboolean p_use_apk_expansion) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jclass clazz, jobject p_activity, jobject p_godot_instance, jobject p_asset_manager, jobject p_godot_io, jobject p_net_utils, jobject p_directory_access_handler, jobject p_file_access_handler, jboolean p_use_apk_expansion, jobject p_godot_tts) { JavaVM *jvm; env->GetJavaVM(&jvm); // create our wrapper classes - godot_java = new GodotJavaWrapper(env, activity, godot_instance); - godot_io_java = new GodotIOJavaWrapper(env, godot_java->get_member_object("io", "Lorg/godotengine/godot/GodotIO;", env)); + godot_java = new GodotJavaWrapper(env, p_activity, p_godot_instance); + godot_io_java = new GodotIOJavaWrapper(env, p_godot_io); init_thread_jandroid(jvm, env); @@ -92,9 +93,10 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *en FileAccessAndroid::asset_manager = AAssetManager_fromJava(env, amgr); - DirAccessJAndroid::setup(godot_io_java->get_instance()); - NetSocketAndroid::setup(godot_java->get_member_object("netUtils", "Lorg/godotengine/godot/utils/GodotNetUtils;", env)); - TTS_Android::setup(godot_java->get_member_object("tts", "Lorg/godotengine/godot/tts/GodotTTS;", env)); + DirAccessJAndroid::setup(p_directory_access_handler); + FileAccessFilesystemJAndroid::setup(p_file_access_handler); + NetSocketAndroid::setup(p_net_utils); + TTS_Android::setup(p_godot_tts); os_android = new OS_Android(godot_java, godot_io_java, p_use_apk_expansion); diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h index aa8d67cf46..de16f197b8 100644 --- a/platform/android/java_godot_lib_jni.h +++ b/platform/android/java_godot_lib_jni.h @@ -37,7 +37,7 @@ // These functions can be called from within JAVA and are the means by which our JAVA implementation calls back into our C++ code. // See java/src/org/godotengine/godot/GodotLib.java for the JAVA side of this (yes that's why we have the long names) extern "C" { -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jclass clazz, jobject activity, jobject godot_instance, jobject p_asset_manager, jboolean p_use_apk_expansion); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jclass clazz, jobject p_activity, jobject p_godot_instance, jobject p_asset_manager, jobject p_godot_io, jobject p_net_utils, jobject p_directory_access_handler, jobject p_file_access_handler, jboolean p_use_apk_expansion, jobject p_godot_tts); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_ondestroy(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setup(JNIEnv *env, jclass clazz, jobjectArray p_cmdline); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, jclass clazz, jobject p_surface, jint p_width, jint p_height); diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 6674428de8..0f551e7f4f 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -40,6 +40,7 @@ #include "dir_access_jandroid.h" #include "file_access_android.h" +#include "file_access_filesystem_jandroid.h" #include "net_socket_android.h" #include <dlfcn.h> @@ -93,7 +94,7 @@ void OS_Android::initialize_core() { } #endif FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_USERDATA); - FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_FILESYSTEM); + FileAccess::make_default<FileAccessFilesystemJAndroid>(FileAccess::ACCESS_FILESYSTEM); #ifdef TOOLS_ENABLED DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_RESOURCES); @@ -105,7 +106,7 @@ void OS_Android::initialize_core() { } #endif DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_USERDATA); - DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_FILESYSTEM); + DirAccess::make_default<DirAccessJAndroid>(DirAccess::ACCESS_FILESYSTEM); NetSocketAndroid::make_default(); } @@ -300,6 +301,33 @@ String OS_Android::get_system_dir(SystemDir p_dir, bool p_shared_storage) const return godot_io_java->get_system_dir(p_dir, p_shared_storage); } +Error OS_Android::move_to_trash(const String &p_path) { + Ref<DirAccess> da_ref = DirAccess::create_for_path(p_path); + if (da_ref.is_null()) { + return FAILED; + } + + // Check if it's a directory + if (da_ref->dir_exists(p_path)) { + Error err = da_ref->change_dir(p_path); + if (err) { + return err; + } + // This is directory, let's erase its contents + err = da_ref->erase_contents_recursive(); + if (err) { + return err; + } + // Remove the top directory + return da_ref->remove(p_path); + } else if (da_ref->file_exists(p_path)) { + // This is a file, let's remove it. + return da_ref->remove(p_path); + } else { + return FAILED; + } +} + void OS_Android::set_display_size(const Size2i &p_size) { display_size = p_size; } diff --git a/platform/android/os_android.h b/platform/android/os_android.h index 3f607eac48..96c06d715c 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -122,6 +122,8 @@ public: virtual String get_system_dir(SystemDir p_dir, bool p_shared_storage = true) const override; + virtual Error move_to_trash(const String &p_path) override; + void vibrate_handheld(int p_duration_ms) override; virtual String get_config_path() const override; diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp index ce32674c88..b0f87484b9 100644 --- a/platform/linuxbsd/display_server_x11.cpp +++ b/platform/linuxbsd/display_server_x11.cpp @@ -196,6 +196,7 @@ bool DisplayServerX11::_refresh_device_info() { xi.absolute_devices.clear(); xi.touch_devices.clear(); + xi.pen_inverted_devices.clear(); int dev_count; XIDeviceInfo *info = XIQueryDevice(x11_display, XIAllDevices, &dev_count); @@ -205,7 +206,7 @@ bool DisplayServerX11::_refresh_device_info() { if (!dev->enabled) { continue; } - if (!(dev->use == XIMasterPointer || dev->use == XIFloatingSlave)) { + if (!(dev->use == XISlavePointer || dev->use == XIFloatingSlave)) { continue; } @@ -274,6 +275,7 @@ bool DisplayServerX11::_refresh_device_info() { xi.pen_pressure_range[dev->deviceid] = Vector2(pressure_min, pressure_max); xi.pen_tilt_x_range[dev->deviceid] = Vector2(tilt_x_min, tilt_x_max); xi.pen_tilt_y_range[dev->deviceid] = Vector2(tilt_y_min, tilt_y_max); + xi.pen_inverted_devices[dev->deviceid] = (bool)strstr(dev->name, "eraser"); } XIFreeDeviceInfo(info); @@ -3484,7 +3486,7 @@ void DisplayServerX11::process_events() { } break; case XI_RawMotion: { XIRawEvent *raw_event = (XIRawEvent *)event_data; - int device_id = raw_event->deviceid; + int device_id = raw_event->sourceid; // Determine the axis used (called valuators in XInput for some forsaken reason) // Mask is a bitmask indicating which axes are involved. @@ -3550,6 +3552,11 @@ void DisplayServerX11::process_events() { values++; } + HashMap<int, bool>::Iterator pen_inverted = xi.pen_inverted_devices.find(device_id); + if (pen_inverted) { + xi.pen_inverted = pen_inverted->value; + } + // https://bugs.freedesktop.org/show_bug.cgi?id=71609 // http://lists.libsdl.org/pipermail/commits-libsdl.org/2015-June/000282.html if (raw_event->time == xi.last_relative_time && rel_x == xi.relative_motion.x && rel_y == xi.relative_motion.y) { @@ -3984,6 +3991,7 @@ void DisplayServerX11::process_events() { mm->set_pressure(bool(mouse_get_button_state() & MouseButton::MASK_LEFT) ? 1.0f : 0.0f); } mm->set_tilt(xi.tilt); + mm->set_pen_inverted(xi.pen_inverted); _get_key_modifier_state(event.xmotion.state, mm); mm->set_button_mask((MouseButton)mouse_get_button_state()); @@ -4167,13 +4175,17 @@ void DisplayServerX11::process_events() { void DisplayServerX11::release_rendering_thread() { #if defined(GLES3_ENABLED) - gl_manager->release_current(); + if (gl_manager) { + gl_manager->release_current(); + } #endif } void DisplayServerX11::make_rendering_thread() { #if defined(GLES3_ENABLED) - gl_manager->make_current(); + if (gl_manager) { + gl_manager->make_current(); + } #endif } diff --git a/platform/linuxbsd/display_server_x11.h b/platform/linuxbsd/display_server_x11.h index a87f2bb6e1..9ce6a557db 100644 --- a/platform/linuxbsd/display_server_x11.h +++ b/platform/linuxbsd/display_server_x11.h @@ -201,10 +201,12 @@ class DisplayServerX11 : public DisplayServer { HashMap<int, Vector2> pen_pressure_range; HashMap<int, Vector2> pen_tilt_x_range; HashMap<int, Vector2> pen_tilt_y_range; + HashMap<int, bool> pen_inverted_devices; XIEventMask all_event_mask; HashMap<int, Vector2> state; double pressure; bool pressure_supported; + bool pen_inverted; Vector2 tilt; Vector2 mouse_pos_to_filter; Vector2 relative_motion; diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm index b6a5813bd0..4307685422 100644 --- a/platform/osx/display_server_osx.mm +++ b/platform/osx/display_server_osx.mm @@ -2920,7 +2920,9 @@ void DisplayServerOSX::make_rendering_thread() { void DisplayServerOSX::swap_buffers() { #if defined(GLES3_ENABLED) - gl_manager->swap_buffers(); + if (gl_manager) { + gl_manager->swap_buffers(); + } #endif } diff --git a/platform/osx/godot_content_view.h b/platform/osx/godot_content_view.h index 7942d716dc..353305aec1 100644 --- a/platform/osx/godot_content_view.h +++ b/platform/osx/godot_content_view.h @@ -52,6 +52,7 @@ bool ime_input_event_in_progress; bool mouse_down_control; bool ignore_momentum_scroll; + bool last_pen_inverted; } - (void)processScrollEvent:(NSEvent *)event button:(MouseButton)button factor:(double)factor; diff --git a/platform/osx/godot_content_view.mm b/platform/osx/godot_content_view.mm index e96f0a8098..018b90e629 100644 --- a/platform/osx/godot_content_view.mm +++ b/platform/osx/godot_content_view.mm @@ -42,6 +42,7 @@ ime_input_event_in_progress = false; mouse_down_control = false; ignore_momentum_scroll = false; + last_pen_inverted = false; [self updateTrackingAreas]; if (@available(macOS 10.13, *)) { @@ -377,9 +378,15 @@ ds->update_mouse_pos(wd, mpos); mm->set_position(wd.mouse_pos); mm->set_pressure([event pressure]); - if ([event subtype] == NSEventSubtypeTabletPoint) { + NSEventSubtype subtype = [event subtype]; + if (subtype == NSEventSubtypeTabletPoint) { const NSPoint p = [event tilt]; mm->set_tilt(Vector2(p.x, p.y)); + mm->set_pen_inverted(last_pen_inverted); + } else if (subtype == NSEventSubtypeTabletProximity) { + // Check if using the eraser end of pen only on proximity event. + last_pen_inverted = [event pointingDeviceType] == NSPointingDeviceTypeEraser; + mm->set_pen_inverted(last_pen_inverted); } mm->set_global_position(wd.mouse_pos); mm->set_velocity(Input::get_singleton()->get_last_mouse_velocity()); diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 998b0882b3..e66fa142a7 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -656,7 +656,9 @@ void DisplayServerWindows::delete_sub_window(WindowID p_window) { void DisplayServerWindows::gl_window_make_current(DisplayServer::WindowID p_window_id) { #if defined(GLES3_ENABLED) - gl_manager->window_make_current(p_window_id); + if (gl_manager) { + gl_manager->window_make_current(p_window_id); + } #endif } @@ -2490,6 +2492,8 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA windows[window_id].last_tilt = Vector2(); } + windows[window_id].last_pen_inverted = packet.pkStatus & TPS_INVERT; + POINT coords; GetCursorPos(&coords); ScreenToClient(windows[window_id].hWnd, &coords); @@ -2508,6 +2512,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm->set_pressure(windows[window_id].last_pressure); mm->set_tilt(windows[window_id].last_tilt); + mm->set_pen_inverted(windows[window_id].last_pen_inverted); mm->set_button_mask(last_button_state); @@ -2640,6 +2645,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA if ((pen_info.penMask & PEN_MASK_TILT_X) && (pen_info.penMask & PEN_MASK_TILT_Y)) { mm->set_tilt(Vector2((float)pen_info.tiltX / 90, (float)pen_info.tiltY / 90)); } + mm->set_pen_inverted(pen_info.penFlags & (PEN_FLAG_INVERTED | PEN_FLAG_ERASER)); mm->set_ctrl_pressed(GetKeyState(VK_CONTROL) < 0); mm->set_shift_pressed(GetKeyState(VK_SHIFT) < 0); @@ -2742,14 +2748,17 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA } else { windows[window_id].last_tilt = Vector2(); windows[window_id].last_pressure = (wParam & MK_LBUTTON) ? 1.0f : 0.0f; + windows[window_id].last_pen_inverted = false; } } else { windows[window_id].last_tilt = Vector2(); windows[window_id].last_pressure = (wParam & MK_LBUTTON) ? 1.0f : 0.0f; + windows[window_id].last_pen_inverted = false; } mm->set_pressure(windows[window_id].last_pressure); mm->set_tilt(windows[window_id].last_tilt); + mm->set_pen_inverted(windows[window_id].last_pen_inverted); mm->set_button_mask(last_button_state); @@ -3360,8 +3369,8 @@ void DisplayServerWindows::_update_tablet_ctx(const String &p_old_driver, const if ((p_new_driver == "wintab") && wintab_available) { wintab_WTInfo(WTI_DEFSYSCTX, 0, &wd.wtlc); wd.wtlc.lcOptions |= CXO_MESSAGES; - wd.wtlc.lcPktData = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE | PK_ORIENTATION; - wd.wtlc.lcMoveMask = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE; + wd.wtlc.lcPktData = PK_STATUS | PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE | PK_ORIENTATION; + wd.wtlc.lcMoveMask = PK_STATUS | PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE; wd.wtlc.lcPktMode = 0; wd.wtlc.lcOutOrgX = 0; wd.wtlc.lcOutExtX = wd.wtlc.lcInExtX; @@ -3484,8 +3493,8 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode, if ((tablet_get_current_driver() == "wintab") && wintab_available) { wintab_WTInfo(WTI_DEFSYSCTX, 0, &wd.wtlc); wd.wtlc.lcOptions |= CXO_MESSAGES; - wd.wtlc.lcPktData = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE | PK_ORIENTATION; - wd.wtlc.lcMoveMask = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE; + wd.wtlc.lcPktData = PK_STATUS | PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE | PK_ORIENTATION; + wd.wtlc.lcMoveMask = PK_STATUS | PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE; wd.wtlc.lcPktMode = 0; wd.wtlc.lcOutOrgX = 0; wd.wtlc.lcOutExtX = wd.wtlc.lcInExtX; diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index fc89517774..0429bed3a0 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -82,10 +82,13 @@ #define DVC_ROTATION 18 #define CXO_MESSAGES 0x0004 +#define PK_STATUS 0x0002 #define PK_NORMAL_PRESSURE 0x0400 #define PK_TANGENT_PRESSURE 0x0800 #define PK_ORIENTATION 0x1000 +#define TPS_INVERT 0x0010 /* 1.1 */ + typedef struct tagLOGCONTEXTW { WCHAR lcName[40]; UINT lcOptions; @@ -137,6 +140,7 @@ typedef struct tagORIENTATION { } ORIENTATION; typedef struct tagPACKET { + int pkStatus; int pkNormalPressure; int pkTangentPressure; ORIENTATION pkOrientation; @@ -158,6 +162,14 @@ typedef UINT32 POINTER_FLAGS; typedef UINT32 PEN_FLAGS; typedef UINT32 PEN_MASK; +#ifndef PEN_FLAG_INVERTED +#define PEN_FLAG_INVERTED 0x00000002 +#endif + +#ifndef PEN_FLAG_ERASER +#define PEN_FLAG_ERASER 0x00000004 +#endif + #ifndef PEN_MASK_PRESSURE #define PEN_MASK_PRESSURE 0x00000001 #endif @@ -357,11 +369,13 @@ class DisplayServerWindows : public DisplayServer { int min_pressure; int max_pressure; bool tilt_supported; + bool pen_inverted = false; bool block_mm = false; int last_pressure_update; float last_pressure; Vector2 last_tilt; + bool last_pen_inverted = false; HBITMAP hBitmap; //DIB section for layered window uint8_t *dib_data = nullptr; diff --git a/scene/3d/voxel_gi.cpp b/scene/3d/voxel_gi.cpp index d81b59b3fc..ae231026a7 100644 --- a/scene/3d/voxel_gi.cpp +++ b/scene/3d/voxel_gi.cpp @@ -272,7 +272,8 @@ VoxelGI::Subdiv VoxelGI::get_subdiv() const { } void VoxelGI::set_extents(const Vector3 &p_extents) { - extents = p_extents; + // Prevent very small extents as these break baking if other extents are set very high. + extents = Vector3(MAX(1.0, p_extents.x), MAX(1.0, p_extents.y), MAX(1.0, p_extents.z)); update_gizmos(); } diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 540250c8e9..377a9c45c5 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -744,6 +744,17 @@ void LineEdit::_notification(int p_what) { update(); } break; + case NOTIFICATION_INTERNAL_PROCESS: { + if (caret_blinking) { + caret_blink_timer += get_process_delta_time(); + + if (caret_blink_timer >= caret_blink_speed) { + caret_blink_timer = 0.0; + _toggle_draw_caret(); + } + } + } break; + case NOTIFICATION_DRAW: { if ((!has_focus() && !(menu && menu->has_focus()) && !caret_force_displayed) || !window_has_focus) { draw_caret = false; @@ -991,8 +1002,9 @@ void LineEdit::_notification(int p_what) { case NOTIFICATION_FOCUS_ENTER: { if (!caret_force_displayed) { if (caret_blink_enabled) { - if (caret_blink_timer->is_stopped()) { - caret_blink_timer->start(); + if (!caret_blinking) { + caret_blinking = true; + caret_blink_timer = 0.0; } } else { draw_caret = true; @@ -1010,7 +1022,7 @@ void LineEdit::_notification(int p_what) { case NOTIFICATION_FOCUS_EXIT: { if (caret_blink_enabled && !caret_force_displayed) { - caret_blink_timer->stop(); + caret_blinking = false; } if (get_viewport()->get_window_id() != DisplayServer::INVALID_WINDOW_ID && DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_IME)) { @@ -1318,14 +1330,16 @@ bool LineEdit::is_caret_blink_enabled() const { void LineEdit::set_caret_blink_enabled(const bool p_enabled) { caret_blink_enabled = p_enabled; + set_process_internal(p_enabled); if (has_focus() || caret_force_displayed) { if (p_enabled) { - if (caret_blink_timer->is_stopped()) { - caret_blink_timer->start(); + if (!caret_blinking) { + caret_blinking = true; + caret_blink_timer = 0.0; } } else { - caret_blink_timer->stop(); + caret_blinking = false; } } @@ -1345,20 +1359,19 @@ void LineEdit::set_caret_force_displayed(const bool p_enabled) { } float LineEdit::get_caret_blink_speed() const { - return caret_blink_timer->get_wait_time(); + return caret_blink_speed; } void LineEdit::set_caret_blink_speed(const float p_speed) { ERR_FAIL_COND(p_speed <= 0); - caret_blink_timer->set_wait_time(p_speed); + caret_blink_speed = p_speed; } void LineEdit::_reset_caret_blink_timer() { if (caret_blink_enabled) { draw_caret = true; if (has_focus()) { - caret_blink_timer->stop(); - caret_blink_timer->start(); + caret_blink_timer = 0.0; update(); } } @@ -2508,10 +2521,6 @@ LineEdit::LineEdit(const String &p_placeholder) { set_mouse_filter(MOUSE_FILTER_STOP); set_process_unhandled_key_input(true); - caret_blink_timer = memnew(Timer); - add_child(caret_blink_timer, false, INTERNAL_MODE_FRONT); - caret_blink_timer->set_wait_time(0.65); - caret_blink_timer->connect("timeout", callable_mp(this, &LineEdit::_toggle_draw_caret)); set_caret_blink_enabled(false); set_placeholder(p_placeholder); diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 0fb178fca4..63c57640dc 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -160,7 +160,9 @@ private: bool caret_blink_enabled = false; bool caret_force_displayed = false; bool draw_caret = true; - Timer *caret_blink_timer = nullptr; + float caret_blink_speed = 0.65; + double caret_blink_timer = 0.0; + bool caret_blinking = false; bool _is_over_clear_button(const Point2 &p_pos) const; diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 5506616b7a..a8542c4346 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -2668,7 +2668,11 @@ void TextEdit::_update_caches() { /* General overrides. */ Size2 TextEdit::get_minimum_size() const { - return style_normal->get_minimum_size(); + Size2 size = style_normal->get_minimum_size(); + if (fit_content_height) { + size.y += content_height_cache; + } + return size; } bool TextEdit::is_text_field() const { @@ -4499,6 +4503,18 @@ float TextEdit::get_v_scroll_speed() const { return v_scroll_speed; } +void TextEdit::set_fit_content_height_enabled(const bool p_enabled) { + if (fit_content_height == p_enabled) { + return; + } + fit_content_height = p_enabled; + update_minimum_size(); +} + +bool TextEdit::is_fit_content_height_enabled() const { + return fit_content_height; +} + double TextEdit::get_scroll_pos_for_line(int p_line, int p_wrap_index) const { ERR_FAIL_INDEX_V(p_line, text.size(), 0); ERR_FAIL_COND_V(p_wrap_index < 0, 0); @@ -5297,7 +5313,7 @@ void TextEdit::_bind_methods() { /* Viewport. */ // Scrolling. - ClassDB::bind_method(D_METHOD("set_smooth_scroll_enable", "enable"), &TextEdit::set_smooth_scroll_enabled); + ClassDB::bind_method(D_METHOD("set_smooth_scroll_enabled", "enable"), &TextEdit::set_smooth_scroll_enabled); ClassDB::bind_method(D_METHOD("is_smooth_scroll_enabled"), &TextEdit::is_smooth_scroll_enabled); ClassDB::bind_method(D_METHOD("set_v_scroll", "value"), &TextEdit::set_v_scroll); @@ -5312,6 +5328,9 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("set_v_scroll_speed", "speed"), &TextEdit::set_v_scroll_speed); ClassDB::bind_method(D_METHOD("get_v_scroll_speed"), &TextEdit::get_v_scroll_speed); + ClassDB::bind_method(D_METHOD("set_fit_content_height_enabled"), &TextEdit::set_fit_content_height_enabled); + ClassDB::bind_method(D_METHOD("is_fit_content_height_enabled"), &TextEdit::is_fit_content_height_enabled); + ClassDB::bind_method(D_METHOD("get_scroll_pos_for_line", "line", "wrap_index"), &TextEdit::get_scroll_pos_for_line, DEFVAL(0)); // Visible lines. @@ -5431,11 +5450,12 @@ void TextEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "syntax_highlighter", PROPERTY_HINT_RESOURCE_TYPE, "SyntaxHighlighter", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE), "set_syntax_highlighter", "get_syntax_highlighter"); ADD_GROUP("Scroll", "scroll_"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_smooth"), "set_smooth_scroll_enable", "is_smooth_scroll_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_smooth"), "set_smooth_scroll_enabled", "is_smooth_scroll_enabled"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scroll_v_scroll_speed", PROPERTY_HINT_NONE, "suffix:px/s"), "set_v_scroll_speed", "get_v_scroll_speed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_past_end_of_file"), "set_scroll_past_end_of_file_enabled", "is_scroll_past_end_of_file_enabled"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scroll_vertical", PROPERTY_HINT_NONE, "suffix:px"), "set_v_scroll", "get_v_scroll"); ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_horizontal", PROPERTY_HINT_NONE, "suffix:px"), "set_h_scroll", "get_h_scroll"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_fit_content_height"), "set_fit_content_height_enabled", "is_fit_content_height_enabled"); ADD_GROUP("Minimap", "minimap_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "minimap_draw"), "set_draw_minimap", "is_drawing_minimap"); @@ -6197,6 +6217,11 @@ void TextEdit::_update_scrollbars() { total_width += minimap_width; } + content_height_cache = MAX(total_rows, 1) * get_line_height(); + if (fit_content_height) { + update_minimum_size(); + } + updating_scrolls = true; if (total_rows > visible_rows) { diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 9de2982d0a..6ba6e9cf20 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -456,6 +456,8 @@ private: HScrollBar *h_scroll = nullptr; VScrollBar *v_scroll = nullptr; + float content_height_cache = 0.0; + bool fit_content_height = false; bool scroll_past_end_of_file_enabled = false; // Smooth scrolling. @@ -851,6 +853,9 @@ public: void set_v_scroll_speed(float p_speed); float get_v_scroll_speed() const; + void set_fit_content_height_enabled(const bool p_enabled); + bool is_fit_content_height_enabled() const; + double get_scroll_pos_for_line(int p_line, int p_wrap_index = 0) const; // Visible lines. diff --git a/scene/gui/video_stream_player.h b/scene/gui/video_stream_player.h index d2822a989b..913e7905b6 100644 --- a/scene/gui/video_stream_player.h +++ b/scene/gui/video_stream_player.h @@ -64,7 +64,7 @@ class VideoStreamPlayer : public Control { bool autoplay = false; float volume = 1.0; double last_audio_time = 0.0; - bool expand = true; + bool expand = false; bool loops = false; int buffering_ms = 500; int audio_track = 0; diff --git a/scene/resources/world_3d.cpp b/scene/resources/world_3d.cpp index a84ee773b4..fb6dcd3d57 100644 --- a/scene/resources/world_3d.cpp +++ b/scene/resources/world_3d.cpp @@ -31,7 +31,6 @@ #include "world_3d.h" #include "core/config/project_settings.h" -#include "core/math/octree.h" #include "scene/3d/camera_3d.h" #include "scene/3d/visible_on_screen_notifier_3d.h" #include "scene/scene_string_names.h" diff --git a/servers/rendering/SCsub b/servers/rendering/SCsub index 06d1d28b08..cf26ca029d 100644 --- a/servers/rendering/SCsub +++ b/servers/rendering/SCsub @@ -4,5 +4,6 @@ Import("env") env.add_source_files(env.servers_sources, "*.cpp") +SConscript("dummy/SCsub") SConscript("renderer_rd/SCsub") SConscript("storage/SCsub") diff --git a/servers/rendering/dummy/SCsub b/servers/rendering/dummy/SCsub new file mode 100644 index 0000000000..aa688af6cd --- /dev/null +++ b/servers/rendering/dummy/SCsub @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") + +SConscript("storage/SCsub") diff --git a/servers/rendering/dummy/environment/fog.h b/servers/rendering/dummy/environment/fog.h new file mode 100644 index 0000000000..8a2be90507 --- /dev/null +++ b/servers/rendering/dummy/environment/fog.h @@ -0,0 +1,55 @@ +/*************************************************************************/ +/* fog.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef FOG_DUMMY_H +#define FOG_DUMMY_H + +#include "servers/rendering/environment/renderer_fog.h" + +namespace RendererDummy { + +class Fog : public RendererFog { +public: + /* FOG VOLUMES */ + + virtual RID fog_volume_allocate() override { return RID(); } + virtual void fog_volume_initialize(RID p_rid) override {} + virtual void fog_free(RID p_rid) override {} + + virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) override {} + virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) override {} + virtual void fog_volume_set_material(RID p_fog_volume, RID p_material) override {} + virtual AABB fog_volume_get_aabb(RID p_fog_volume) const override { return AABB(); } + virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const override { return RS::FOG_VOLUME_SHAPE_BOX; } +}; + +} // namespace RendererDummy + +#endif // !FOG_DUMMY_H diff --git a/servers/rendering/dummy/environment/gi.h b/servers/rendering/dummy/environment/gi.h index 374f0c8923..9c7647c2de 100644 --- a/servers/rendering/dummy/environment/gi.h +++ b/servers/rendering/dummy/environment/gi.h @@ -74,9 +74,6 @@ public: virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override {} virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override { return false; } - virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override {} - virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override { return 0; } - virtual uint32_t voxel_gi_get_version(RID p_voxel_gi) const override { return 0; } }; diff --git a/servers/rendering/dummy/rasterizer_dummy.h b/servers/rendering/dummy/rasterizer_dummy.h index 9c2bd45cce..d867114384 100644 --- a/servers/rendering/dummy/rasterizer_dummy.h +++ b/servers/rendering/dummy/rasterizer_dummy.h @@ -34,15 +34,16 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "scene/resources/mesh.h" +#include "servers/rendering/dummy/environment/fog.h" #include "servers/rendering/dummy/environment/gi.h" #include "servers/rendering/dummy/rasterizer_canvas_dummy.h" #include "servers/rendering/dummy/rasterizer_scene_dummy.h" -#include "servers/rendering/dummy/rasterizer_storage_dummy.h" #include "servers/rendering/dummy/storage/light_storage.h" #include "servers/rendering/dummy/storage/material_storage.h" #include "servers/rendering/dummy/storage/mesh_storage.h" #include "servers/rendering/dummy/storage/particles_storage.h" #include "servers/rendering/dummy/storage/texture_storage.h" +#include "servers/rendering/dummy/storage/utilities.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering_server.h" @@ -53,23 +54,25 @@ private: protected: RasterizerCanvasDummy canvas; + RendererDummy::Utilities utilities; RendererDummy::LightStorage light_storage; RendererDummy::MaterialStorage material_storage; RendererDummy::MeshStorage mesh_storage; RendererDummy::ParticlesStorage particles_storage; RendererDummy::TextureStorage texture_storage; RendererDummy::GI gi; - RasterizerStorageDummy storage; + RendererDummy::Fog fog; RasterizerSceneDummy scene; public: + RendererUtilities *get_utilities() override { return &utilities; }; RendererLightStorage *get_light_storage() override { return &light_storage; }; RendererMaterialStorage *get_material_storage() override { return &material_storage; }; RendererMeshStorage *get_mesh_storage() override { return &mesh_storage; }; RendererParticlesStorage *get_particles_storage() override { return &particles_storage; }; RendererTextureStorage *get_texture_storage() override { return &texture_storage; }; RendererGI *get_gi() override { return &gi; }; - RendererStorage *get_storage() override { return &storage; } + RendererFog *get_fog() override { return &fog; }; RendererCanvasRender *get_canvas() override { return &canvas; } RendererSceneRender *get_scene() override { return &scene; } diff --git a/servers/rendering/dummy/storage/SCsub b/servers/rendering/dummy/storage/SCsub new file mode 100644 index 0000000000..86681f9c74 --- /dev/null +++ b/servers/rendering/dummy/storage/SCsub @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/rendering/dummy/storage/material_storage.h b/servers/rendering/dummy/storage/material_storage.h index 8890be8ea9..d4809f81e3 100644 --- a/servers/rendering/dummy/storage/material_storage.h +++ b/servers/rendering/dummy/storage/material_storage.h @@ -32,6 +32,7 @@ #define MATERIAL_STORAGE_DUMMY_H #include "servers/rendering/storage/material_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererDummy { @@ -87,7 +88,7 @@ public: virtual bool material_is_animated(RID p_material) override { return false; } virtual bool material_casts_shadows(RID p_material) override { return false; } virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override {} - virtual void material_update_dependency(RID p_material, RendererStorage::DependencyTracker *p_instance) override {} + virtual void material_update_dependency(RID p_material, DependencyTracker *p_instance) override {} }; } // namespace RendererDummy diff --git a/servers/rendering/dummy/storage/mesh_storage.h b/servers/rendering/dummy/storage/mesh_storage.h index dfbd265bba..78b19d721d 100644 --- a/servers/rendering/dummy/storage/mesh_storage.h +++ b/servers/rendering/dummy/storage/mesh_storage.h @@ -32,6 +32,7 @@ #define MESH_STORAGE_DUMMY_H #include "servers/rendering/storage/mesh_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererDummy { @@ -121,7 +122,11 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform) override {} virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const override { return Transform2D(); } - virtual void skeleton_update_dependency(RID p_base, RendererStorage::DependencyTracker *p_instance) override {} + virtual void skeleton_update_dependency(RID p_base, DependencyTracker *p_instance) override {} + + /* OCCLUDER */ + + void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) {} }; } // namespace RendererDummy diff --git a/servers/rendering/dummy/storage/texture_storage.cpp b/servers/rendering/dummy/storage/texture_storage.cpp new file mode 100644 index 0000000000..62e2a306a2 --- /dev/null +++ b/servers/rendering/dummy/storage/texture_storage.cpp @@ -0,0 +1,43 @@ +/*************************************************************************/ +/* texture_storage.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "texture_storage.h" + +using namespace RendererDummy; + +TextureStorage *TextureStorage::singleton = nullptr; + +TextureStorage::TextureStorage() { + singleton = this; +} + +TextureStorage::~TextureStorage() { + singleton = nullptr; +} diff --git a/servers/rendering/dummy/storage/texture_storage.h b/servers/rendering/dummy/storage/texture_storage.h index 11d827a6e3..fe10f6489c 100644 --- a/servers/rendering/dummy/storage/texture_storage.h +++ b/servers/rendering/dummy/storage/texture_storage.h @@ -38,6 +38,8 @@ namespace RendererDummy { class TextureStorage : public RendererTextureStorage { private: + static TextureStorage *singleton; + struct DummyTexture { Ref<Image> image; }; @@ -45,11 +47,12 @@ private: public: static TextureStorage *get_singleton() { - // Here we cheat until we can retire RasterizerStorageDummy::free() - - return (TextureStorage *)RSG::texture_storage; + return singleton; }; + TextureStorage(); + ~TextureStorage(); + virtual bool can_create_resources_async() const override { return false; } /* Canvas Texture API */ diff --git a/servers/rendering/dummy/rasterizer_storage_dummy.h b/servers/rendering/dummy/storage/utilities.h index 7f637d2c42..f090309e88 100644 --- a/servers/rendering/dummy/rasterizer_storage_dummy.h +++ b/servers/rendering/dummy/storage/utilities.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* rasterizer_storage_dummy.h */ +/* utilities.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,79 +28,71 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef RASTERIZER_STORAGE_DUMMY_H -#define RASTERIZER_STORAGE_DUMMY_H +#ifndef UTILITIES_DUMMY_H +#define UTILITIES_DUMMY_H -#include "servers/rendering/renderer_storage.h" -#include "storage/texture_storage.h" +#include "servers/rendering/storage/utilities.h" +#include "texture_storage.h" -class RasterizerStorageDummy : public RendererStorage { -public: - void base_update_dependency(RID p_base, DependencyTracker *p_instance) override {} - - /* OCCLUDER */ +namespace RendererDummy { - void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) {} +class Utilities : public RendererUtilities { +public: + /* INSTANCES */ - /* FOG VOLUMES */ + virtual RS::InstanceType get_base_type(RID p_rid) const override { return RS::INSTANCE_NONE; } + virtual bool free(RID p_rid) override { + if (RendererDummy::TextureStorage::get_singleton()->owns_texture(p_rid)) { + RendererDummy::TextureStorage::get_singleton()->texture_free(p_rid); + return true; + } + return false; + } - RID fog_volume_allocate() override { return RID(); } - void fog_volume_initialize(RID p_rid) override {} + /* DEPENDENCIES */ - void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) override {} - void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) override {} - void fog_volume_set_material(RID p_fog_volume, RID p_material) override {} - AABB fog_volume_get_aabb(RID p_fog_volume) const override { return AABB(); } - RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const override { return RS::FOG_VOLUME_SHAPE_BOX; } + virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override {} /* VISIBILITY NOTIFIER */ + virtual RID visibility_notifier_allocate() override { return RID(); } virtual void visibility_notifier_initialize(RID p_notifier) override {} + virtual void visibility_notifier_free(RID p_notifier) override {} + virtual void visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) override {} virtual void visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) override {} virtual AABB visibility_notifier_get_aabb(RID p_notifier) const override { return AABB(); } virtual void visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) override {} - /* STORAGE */ + /* TIMING */ - RS::InstanceType get_base_type(RID p_rid) const override { return RS::INSTANCE_NONE; } - bool free(RID p_rid) override { - if (RendererDummy::TextureStorage::get_singleton()->owns_texture(p_rid)) { - RendererDummy::TextureStorage::get_singleton()->texture_free(p_rid); - return true; - } - return false; - } + virtual void capture_timestamps_begin() override {} + virtual void capture_timestamp(const String &p_name) override {} + virtual uint32_t get_captured_timestamps_count() const override { return 0; } + virtual uint64_t get_captured_timestamps_frame() const override { return 0; } + virtual uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const override { return 0; } + virtual uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const override { return 0; } + virtual String get_captured_timestamp_name(uint32_t p_index) const override { return String(); } - virtual void update_memory_info() override {} - virtual uint64_t get_rendering_info(RS::RenderingInfo p_info) override { return 0; } + /* MISC */ + + virtual void update_dirty_resources() override {} + virtual void set_debug_generate_wireframes(bool p_generate) override {} - bool has_os_feature(const String &p_feature) const override { + virtual bool has_os_feature(const String &p_feature) const override { return p_feature == "rgtc" || p_feature == "bptc" || p_feature == "s3tc" || p_feature == "etc" || p_feature == "etc2"; } - void update_dirty_resources() override {} - - void set_debug_generate_wireframes(bool p_generate) override {} - - String get_video_adapter_name() const override { return String(); } - String get_video_adapter_vendor() const override { return String(); } - RenderingDevice::DeviceType get_video_adapter_type() const override { return RenderingDevice::DeviceType::DEVICE_TYPE_OTHER; } - String get_video_adapter_api_version() const override { return String(); } - - static RendererStorage *base_singleton; - - void capture_timestamps_begin() override {} - void capture_timestamp(const String &p_name) override {} - uint32_t get_captured_timestamps_count() const override { return 0; } - uint64_t get_captured_timestamps_frame() const override { return 0; } - uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const override { return 0; } - uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const override { return 0; } - String get_captured_timestamp_name(uint32_t p_index) const override { return String(); } + virtual void update_memory_info() override {} - RasterizerStorageDummy() {} - ~RasterizerStorageDummy() {} + virtual uint64_t get_rendering_info(RS::RenderingInfo p_info) override { return 0; } + virtual String get_video_adapter_name() const override { return String(); } + virtual String get_video_adapter_vendor() const override { return String(); } + virtual RenderingDevice::DeviceType get_video_adapter_type() const override { return RenderingDevice::DeviceType::DEVICE_TYPE_OTHER; } + virtual String get_video_adapter_api_version() const override { return String(); } }; -#endif // !RASTERIZER_STORAGE_DUMMY_H +} // namespace RendererDummy + +#endif // !UTILITIES_DUMMY_H diff --git a/servers/rendering/environment/renderer_fog.h b/servers/rendering/environment/renderer_fog.h new file mode 100644 index 0000000000..ac50da0fc0 --- /dev/null +++ b/servers/rendering/environment/renderer_fog.h @@ -0,0 +1,53 @@ +/*************************************************************************/ +/* renderer_fog.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef RENDERER_FOG_H +#define RENDERER_FOG_H + +#include "servers/rendering_server.h" + +class RendererFog { +public: + virtual ~RendererFog() {} + + /* FOG VOLUMES */ + + virtual RID fog_volume_allocate() = 0; + virtual void fog_volume_initialize(RID p_rid) = 0; + virtual void fog_free(RID p_rid) = 0; + + virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) = 0; + virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) = 0; + virtual void fog_volume_set_material(RID p_fog_volume, RID p_material) = 0; + virtual AABB fog_volume_get_aabb(RID p_fog_volume) const = 0; + virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const = 0; +}; + +#endif // !RENDERER_FOG_H diff --git a/servers/rendering/environment/renderer_gi.h b/servers/rendering/environment/renderer_gi.h index c4f63b7b6b..4f93bb8675 100644 --- a/servers/rendering/environment/renderer_gi.h +++ b/servers/rendering/environment/renderer_gi.h @@ -31,7 +31,6 @@ #ifndef RENDERER_GI_H #define RENDERER_GI_H -#include "servers/rendering/renderer_storage.h" #include "servers/rendering_server.h" class RendererGI { @@ -76,9 +75,6 @@ public: virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) = 0; virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const = 0; - virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) = 0; - virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const = 0; - virtual uint32_t voxel_gi_get_version(RID p_probe) const = 0; }; diff --git a/servers/rendering/renderer_canvas_render.cpp b/servers/rendering/renderer_canvas_render.cpp index 163a24247e..f93fdd500a 100644 --- a/servers/rendering/renderer_canvas_render.cpp +++ b/servers/rendering/renderer_canvas_render.cpp @@ -128,3 +128,9 @@ const Rect2 &RendererCanvasRender::Item::get_rect() const { rect_dirty = false; return rect; } + +RendererCanvasRender::Item::CommandMesh::~CommandMesh() { + if (mesh_instance.is_valid()) { + RSG::mesh_storage->mesh_free(mesh_instance); + } +} diff --git a/servers/rendering/renderer_canvas_render.h b/servers/rendering/renderer_canvas_render.h index 1724a99b20..52b2f82089 100644 --- a/servers/rendering/renderer_canvas_render.h +++ b/servers/rendering/renderer_canvas_render.h @@ -31,7 +31,7 @@ #ifndef RENDERINGSERVERCANVASRENDER_H #define RENDERINGSERVERCANVASRENDER_H -#include "servers/rendering/renderer_storage.h" +#include "servers/rendering_server.h" class RendererCanvasRender { public: @@ -257,11 +257,7 @@ public: RID texture; CommandMesh() { type = TYPE_MESH; } - ~CommandMesh() { - if (mesh_instance.is_valid()) { - RendererStorage::base_singleton->free(mesh_instance); - } - } + ~CommandMesh(); }; struct CommandMultiMesh : public Command { diff --git a/servers/rendering/renderer_compositor.h b/servers/rendering/renderer_compositor.h index f58bc851ef..a67eb25736 100644 --- a/servers/rendering/renderer_compositor.h +++ b/servers/rendering/renderer_compositor.h @@ -31,15 +31,16 @@ #ifndef RENDERING_SERVER_COMPOSITOR_H #define RENDERING_SERVER_COMPOSITOR_H +#include "servers/rendering/environment/renderer_fog.h" #include "servers/rendering/environment/renderer_gi.h" #include "servers/rendering/renderer_canvas_render.h" #include "servers/rendering/renderer_scene.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/storage/light_storage.h" #include "servers/rendering/storage/material_storage.h" #include "servers/rendering/storage/mesh_storage.h" #include "servers/rendering/storage/particles_storage.h" #include "servers/rendering/storage/texture_storage.h" +#include "servers/rendering/storage/utilities.h" #include "servers/rendering_server.h" class RendererSceneRender; @@ -77,13 +78,14 @@ protected: public: static RendererCompositor *create(); + virtual RendererUtilities *get_utilities() = 0; virtual RendererLightStorage *get_light_storage() = 0; virtual RendererMaterialStorage *get_material_storage() = 0; virtual RendererMeshStorage *get_mesh_storage() = 0; virtual RendererParticlesStorage *get_particles_storage() = 0; virtual RendererTextureStorage *get_texture_storage() = 0; virtual RendererGI *get_gi() = 0; - virtual RendererStorage *get_storage() = 0; + virtual RendererFog *get_fog() = 0; virtual RendererCanvasRender *get_canvas() = 0; virtual RendererSceneRender *get_scene() = 0; diff --git a/servers/rendering/renderer_rd/cluster_builder_rd.cpp b/servers/rendering/renderer_rd/cluster_builder_rd.cpp index 0b36fe3964..228933d618 100644 --- a/servers/rendering/renderer_rd/cluster_builder_rd.cpp +++ b/servers/rendering/renderer_rd/cluster_builder_rd.cpp @@ -413,7 +413,7 @@ void ClusterBuilderRD::bake_cluster() { StateUniform state; - RendererStorageRD::store_camera(adjusted_projection, state.projection); + RendererRD::MaterialStorage::store_camera(adjusted_projection, state.projection); state.inv_z_far = 1.0 / z_far; state.screen_to_clusters_shift = get_shift_from_power_of_2(cluster_size); state.screen_to_clusters_shift -= divisor; //screen is smaller, shift one less diff --git a/servers/rendering/renderer_rd/cluster_builder_rd.h b/servers/rendering/renderer_rd/cluster_builder_rd.h index e82193ea6a..74ca530ff6 100644 --- a/servers/rendering/renderer_rd/cluster_builder_rd.h +++ b/servers/rendering/renderer_rd/cluster_builder_rd.h @@ -31,10 +31,10 @@ #ifndef CLUSTER_BUILDER_RD_H #define CLUSTER_BUILDER_RD_H -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/cluster_debug.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/cluster_render.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/cluster_store.glsl.gen.h" +#include "servers/rendering/renderer_rd/storage_rd/material_storage.h" class ClusterBuilderSharedDataRD { friend class ClusterBuilderRD; @@ -261,7 +261,7 @@ public: e.type = ELEMENT_TYPE_OMNI_LIGHT; e.original_index = cluster_count_by_type[ELEMENT_TYPE_OMNI_LIGHT]; - RendererStorageRD::store_transform_transposed_3x4(xform, e.transform_inv); + RendererRD::MaterialStorage::store_transform_transposed_3x4(xform, e.transform_inv); cluster_count_by_type[ELEMENT_TYPE_OMNI_LIGHT]++; @@ -309,7 +309,7 @@ public: e.type = ELEMENT_TYPE_SPOT_LIGHT; e.original_index = cluster_count_by_type[ELEMENT_TYPE_SPOT_LIGHT]; //use omni since they share index - RendererStorageRD::store_transform_transposed_3x4(xform, e.transform_inv); + RendererRD::MaterialStorage::store_transform_transposed_3x4(xform, e.transform_inv); cluster_count_by_type[ELEMENT_TYPE_SPOT_LIGHT]++; } @@ -356,7 +356,7 @@ public: e.type = (p_box_type == BOX_TYPE_DECAL) ? ELEMENT_TYPE_DECAL : ELEMENT_TYPE_REFLECTION_PROBE; e.original_index = cluster_count_by_type[e.type]; - RendererStorageRD::store_transform_transposed_3x4(xform, e.transform_inv); + RendererRD::MaterialStorage::store_transform_transposed_3x4(xform, e.transform_inv); cluster_count_by_type[e.type]++; render_element_count++; diff --git a/servers/rendering/renderer_rd/environment/fog.cpp b/servers/rendering/renderer_rd/environment/fog.cpp new file mode 100644 index 0000000000..2a6c96480e --- /dev/null +++ b/servers/rendering/renderer_rd/environment/fog.cpp @@ -0,0 +1,128 @@ +/*************************************************************************/ +/* fog.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "fog.h" + +using namespace RendererRD; + +Fog *Fog::singleton = nullptr; + +Fog::Fog() { + singleton = this; +} + +Fog::~Fog() { + singleton = nullptr; +} + +/* FOG VOLUMES */ + +RID Fog::fog_volume_allocate() { + return fog_volume_owner.allocate_rid(); +} + +void Fog::fog_volume_initialize(RID p_rid) { + fog_volume_owner.initialize_rid(p_rid, FogVolume()); +} + +void Fog::fog_free(RID p_rid) { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_rid); + fog_volume->dependency.deleted_notify(p_rid); + fog_volume_owner.free(p_rid); +} + +void Fog::fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND(!fog_volume); + + if (p_shape == fog_volume->shape) { + return; + } + + fog_volume->shape = p_shape; + fog_volume->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); +} + +void Fog::fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND(!fog_volume); + + fog_volume->extents = p_extents; + fog_volume->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); +} + +void Fog::fog_volume_set_material(RID p_fog_volume, RID p_material) { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND(!fog_volume); + fog_volume->material = p_material; +} + +RID Fog::fog_volume_get_material(RID p_fog_volume) const { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND_V(!fog_volume, RID()); + + return fog_volume->material; +} + +RS::FogVolumeShape Fog::fog_volume_get_shape(RID p_fog_volume) const { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND_V(!fog_volume, RS::FOG_VOLUME_SHAPE_BOX); + + return fog_volume->shape; +} + +AABB Fog::fog_volume_get_aabb(RID p_fog_volume) const { + FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND_V(!fog_volume, AABB()); + + switch (fog_volume->shape) { + case RS::FOG_VOLUME_SHAPE_ELLIPSOID: + case RS::FOG_VOLUME_SHAPE_CONE: + case RS::FOG_VOLUME_SHAPE_CYLINDER: + case RS::FOG_VOLUME_SHAPE_BOX: { + AABB aabb; + aabb.position = -fog_volume->extents; + aabb.size = fog_volume->extents * 2; + return aabb; + } + default: { + // Need some size otherwise will get culled + return AABB(Vector3(-1, -1, -1), Vector3(2, 2, 2)); + } + } + + return AABB(); +} + +Vector3 Fog::fog_volume_get_extents(RID p_fog_volume) const { + const FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); + ERR_FAIL_COND_V(!fog_volume, Vector3()); + return fog_volume->extents; +} diff --git a/servers/rendering/renderer_rd/environment/fog.h b/servers/rendering/renderer_rd/environment/fog.h new file mode 100644 index 0000000000..55a01c3616 --- /dev/null +++ b/servers/rendering/renderer_rd/environment/fog.h @@ -0,0 +1,83 @@ +/*************************************************************************/ +/* fog.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef FOG_RD_H +#define FOG_RD_H + +#include "core/templates/local_vector.h" +#include "core/templates/rid_owner.h" +#include "servers/rendering/environment/renderer_fog.h" +#include "servers/rendering/storage/utilities.h" + +namespace RendererRD { + +class Fog : public RendererFog { +public: + struct FogVolume { + RID material; + Vector3 extents = Vector3(1, 1, 1); + + RS::FogVolumeShape shape = RS::FOG_VOLUME_SHAPE_BOX; + + Dependency dependency; + }; + +private: + static Fog *singleton; + + mutable RID_Owner<FogVolume, true> fog_volume_owner; + +public: + static Fog *get_singleton() { return singleton; } + + Fog(); + ~Fog(); + + /* FOG VOLUMES */ + + FogVolume *get_fog_volume(RID p_rid) { return fog_volume_owner.get_or_null(p_rid); }; + bool owns_fog_volume(RID p_rid) { return fog_volume_owner.owns(p_rid); }; + + virtual RID fog_volume_allocate() override; + virtual void fog_volume_initialize(RID p_rid) override; + virtual void fog_free(RID p_rid) override; + + virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) override; + virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) override; + virtual void fog_volume_set_material(RID p_fog_volume, RID p_material) override; + virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const override; + RID fog_volume_get_material(RID p_fog_volume) const; + virtual AABB fog_volume_get_aabb(RID p_fog_volume) const override; + Vector3 fog_volume_get_extents(RID p_fog_volume) const; +}; + +} // namespace RendererRD + +#endif // !FOG_RD_H diff --git a/servers/rendering/renderer_rd/environment/gi.cpp b/servers/rendering/renderer_rd/environment/gi.cpp index 19c97eaeeb..a749e7d5bc 100644 --- a/servers/rendering/renderer_rd/environment/gi.cpp +++ b/servers/rendering/renderer_rd/environment/gi.cpp @@ -33,7 +33,6 @@ #include "core/config/project_settings.h" #include "servers/rendering/renderer_rd/renderer_compositor_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" #include "servers/rendering/rendering_server_default.h" @@ -184,7 +183,7 @@ void GI::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xfo voxel_gi->version++; voxel_gi->data_version++; - voxel_gi->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + voxel_gi->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } AABB GI::voxel_gi_get_bounds(RID p_voxel_gi) const { @@ -312,19 +311,6 @@ float GI::voxel_gi_get_normal_bias(RID p_voxel_gi) const { return voxel_gi->normal_bias; } -void GI::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->anisotropy_strength = p_strength; -} - -float GI::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->anisotropy_strength; -} - void GI::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) { VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); ERR_FAIL_COND(!voxel_gi); @@ -390,7 +376,6 @@ void GI::SDFGI::create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - storage = p_gi->storage; gi = p_gi; num_cascades = p_env->sdfgi_cascades; min_cell_size = p_env->sdfgi_min_cell_size; @@ -1287,7 +1272,7 @@ void GI::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env, RendererSceneSk if (p_env->background == RS::ENV_BG_CLEAR_COLOR) { push_constant.sky_mode = SDFGIShader::IntegratePushConstant::SKY_MODE_COLOR; - Color c = storage->get_default_clear_color().srgb_to_linear(); + Color c = RSG::texture_storage->get_default_clear_color().srgb_to_linear(); push_constant.sky_color[0] = c.r; push_constant.sky_color[1] = c.g; push_constant.sky_color[2] = c.b; @@ -1636,7 +1621,7 @@ void GI::SDFGI::debug_probes(RID p_framebuffer, const uint32_t p_view_count, con } for (uint32_t v = 0; v < p_view_count; v++) { - RendererStorageRD::store_camera(p_camera_with_transforms[v], scene_data.projection[v]); + RendererRD::MaterialStorage::store_camera(p_camera_with_transforms[v], scene_data.projection[v]); } RD::get_singleton()->buffer_update(debug_probes_scene_data_ubo, 0, sizeof(SDFGIShader::DebugProbesSceneData), &scene_data, RD::BARRIER_MASK_RASTER); @@ -3218,12 +3203,10 @@ GI::~GI() { singleton = nullptr; } -void GI::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky) { +void GI::init(RendererSceneSkyRD *p_sky) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - storage = p_storage; - /* GI */ { @@ -3679,7 +3662,7 @@ void GI::process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_v } for (uint32_t v = 0; v < p_view_count; v++) { - RendererStorageRD::store_camera(p_projections[v].inverse(), scene_data.inv_projection[v]); + RendererRD::MaterialStorage::store_camera(p_projections[v].inverse(), scene_data.inv_projection[v]); scene_data.eye_offset[v][0] = p_eye_offsets[v].x; scene_data.eye_offset[v][1] = p_eye_offsets[v].y; scene_data.eye_offset[v][2] = p_eye_offsets[v].z; @@ -3687,7 +3670,7 @@ void GI::process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_v } // Note that we will be ignoring the origin of this transform. - RendererStorageRD::store_transform(p_cam_transform, scene_data.cam_transform); + RendererRD::MaterialStorage::store_transform(p_cam_transform, scene_data.cam_transform); scene_data.screen_size[0] = rb->internal_width; scene_data.screen_size[1] = rb->internal_height; @@ -3921,7 +3904,6 @@ void GI::process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_v RID GI::voxel_gi_instance_create(RID p_base) { VoxelGIInstance voxel_gi; voxel_gi.gi = this; - voxel_gi.storage = storage; voxel_gi.probe = p_base; RID rid = voxel_gi_instance_owner.make_rid(voxel_gi); return rid; diff --git a/servers/rendering/renderer_rd/environment/gi.h b/servers/rendering/renderer_rd/environment/gi.h index b6ecfe42ea..294b8d3cfd 100644 --- a/servers/rendering/renderer_rd/environment/gi.h +++ b/servers/rendering/renderer_rd/environment/gi.h @@ -37,7 +37,6 @@ #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_sky_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/environment/gi.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl.gen.h" @@ -47,8 +46,8 @@ #include "servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl.gen.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/rendering_device.h" +#include "servers/rendering/storage/utilities.h" // Forward declare RenderDataRD and RendererSceneRenderRD so we can pass it into some of our methods, these classes are pretty tightly bound struct RenderDataRD; @@ -84,16 +83,13 @@ public: bool interior = false; bool use_two_bounces = false; - float anisotropy_strength = 0.5; - uint32_t version = 1; uint32_t data_version = 1; - RendererStorage::Dependency dependency; + Dependency dependency; }; private: - RendererStorageRD *storage = nullptr; static GI *singleton; /* VOXEL GI STORAGE */ @@ -418,9 +414,6 @@ public: virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override; virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override; - virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override; - virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override; - virtual uint32_t voxel_gi_get_version(RID p_probe) const override; uint32_t voxel_gi_get_data_version(RID p_probe); @@ -435,7 +428,6 @@ public: struct VoxelGIInstance { // access to our containers - RendererStorageRD *storage = nullptr; GI *gi = nullptr; RID probe; @@ -559,7 +551,6 @@ public: }; // access to our containers - RendererStorageRD *storage = nullptr; GI *gi = nullptr; // used for rendering (voxelization) @@ -780,7 +771,7 @@ public: GI(); ~GI(); - void init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky); + void init(RendererSceneSkyRD *p_sky); void free(); SDFGI *create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size); 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 c7048289c8..b1e0017e5b 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -30,6 +30,7 @@ #include "render_forward_clustered.h" #include "core/config/project_settings.h" +#include "servers/rendering/renderer_rd/renderer_compositor_rd.h" #include "servers/rendering/renderer_rd/storage_rd/light_storage.h" #include "servers/rendering/renderer_rd/storage_rd/mesh_storage.h" #include "servers/rendering/renderer_rd/storage_rd/particles_storage.h" @@ -812,15 +813,15 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat CameraMatrix projection = correction * p_render_data->cam_projection; //store camera into ubo - RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix); - RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix); - RendererStorageRD::store_transform(p_render_data->cam_transform, scene_state.ubo.inv_view_matrix); - RendererStorageRD::store_transform(p_render_data->cam_transform.affine_inverse(), scene_state.ubo.view_matrix); + RendererRD::MaterialStorage::store_camera(projection, scene_state.ubo.projection_matrix); + RendererRD::MaterialStorage::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix); + RendererRD::MaterialStorage::store_transform(p_render_data->cam_transform, scene_state.ubo.inv_view_matrix); + RendererRD::MaterialStorage::store_transform(p_render_data->cam_transform.affine_inverse(), scene_state.ubo.view_matrix); for (uint32_t v = 0; v < p_render_data->view_count; v++) { projection = correction * p_render_data->view_projection[v]; - RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix_view[v]); - RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]); + RendererRD::MaterialStorage::store_camera(projection, scene_state.ubo.projection_matrix_view[v]); + RendererRD::MaterialStorage::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]); scene_state.ubo.eye_offset[v][0] = p_render_data->view_eye_offset[v].x; scene_state.ubo.eye_offset[v][1] = p_render_data->view_eye_offset[v].y; @@ -836,10 +837,10 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat scene_state.ubo.pancake_shadows = p_pancake_shadows; - RendererStorageRD::store_soft_shadow_kernel(directional_penumbra_shadow_kernel_get(), scene_state.ubo.directional_penumbra_shadow_kernel); - RendererStorageRD::store_soft_shadow_kernel(directional_soft_shadow_kernel_get(), scene_state.ubo.directional_soft_shadow_kernel); - RendererStorageRD::store_soft_shadow_kernel(penumbra_shadow_kernel_get(), scene_state.ubo.penumbra_shadow_kernel); - RendererStorageRD::store_soft_shadow_kernel(soft_shadow_kernel_get(), scene_state.ubo.soft_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(directional_penumbra_shadow_kernel_get(), scene_state.ubo.directional_penumbra_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(directional_soft_shadow_kernel_get(), scene_state.ubo.directional_soft_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(penumbra_shadow_kernel_get(), scene_state.ubo.penumbra_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(soft_shadow_kernel_get(), scene_state.ubo.soft_shadow_kernel); Size2 screen_pixel_size = Vector2(1.0, 1.0) / Size2(p_screen_size); scene_state.ubo.screen_pixel_size[0] = screen_pixel_size.x; @@ -934,7 +935,7 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat Basis sky_transform = environment_get_sky_orientation(p_render_data->environment); sky_transform = sky_transform.inverse() * p_render_data->cam_transform.basis; - RendererStorageRD::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform); + RendererRD::MaterialStorage::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform); scene_state.ubo.use_ambient_cubemap = (ambient_src == RS::ENV_AMBIENT_SOURCE_BG && env_bg == RS::ENV_BG_SKY) || ambient_src == RS::ENV_AMBIENT_SOURCE_SKY; scene_state.ubo.use_ambient_light = scene_state.ubo.use_ambient_cubemap || ambient_src == RS::ENV_AMBIENT_SOURCE_COLOR; @@ -1005,15 +1006,15 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat CameraMatrix prev_projection = prev_correction * p_render_data->prev_cam_projection; //store camera into ubo - RendererStorageRD::store_camera(prev_projection, scene_state.prev_ubo.projection_matrix); - RendererStorageRD::store_camera(prev_projection.inverse(), scene_state.prev_ubo.inv_projection_matrix); - RendererStorageRD::store_transform(p_render_data->prev_cam_transform, scene_state.prev_ubo.inv_view_matrix); - RendererStorageRD::store_transform(p_render_data->prev_cam_transform.affine_inverse(), scene_state.prev_ubo.view_matrix); + RendererRD::MaterialStorage::store_camera(prev_projection, scene_state.prev_ubo.projection_matrix); + RendererRD::MaterialStorage::store_camera(prev_projection.inverse(), scene_state.prev_ubo.inv_projection_matrix); + RendererRD::MaterialStorage::store_transform(p_render_data->prev_cam_transform, scene_state.prev_ubo.inv_view_matrix); + RendererRD::MaterialStorage::store_transform(p_render_data->prev_cam_transform.affine_inverse(), scene_state.prev_ubo.view_matrix); for (uint32_t v = 0; v < p_render_data->view_count; v++) { prev_projection = prev_correction * p_render_data->view_projection[v]; - RendererStorageRD::store_camera(prev_projection, scene_state.prev_ubo.projection_matrix_view[v]); - RendererStorageRD::store_camera(prev_projection.inverse(), scene_state.prev_ubo.inv_projection_matrix_view[v]); + RendererRD::MaterialStorage::store_camera(prev_projection, scene_state.prev_ubo.projection_matrix_view[v]); + RendererRD::MaterialStorage::store_camera(prev_projection.inverse(), scene_state.prev_ubo.inv_projection_matrix_view[v]); } scene_state.prev_ubo.taa_jitter[0] = p_render_data->prev_taa_jitter.x; scene_state.prev_ubo.taa_jitter[1] = p_render_data->prev_taa_jitter.y; @@ -1069,11 +1070,11 @@ void RenderForwardClustered::_fill_instance_data(RenderListType p_render_list, i } if (inst->store_transform_cache) { - RendererStorageRD::store_transform(inst->transform, instance_data.transform); - RendererStorageRD::store_transform(inst->prev_transform, instance_data.prev_transform); + RendererRD::MaterialStorage::store_transform(inst->transform, instance_data.transform); + RendererRD::MaterialStorage::store_transform(inst->prev_transform, instance_data.prev_transform); } else { - RendererStorageRD::store_transform(Transform3D(), instance_data.transform); - RendererStorageRD::store_transform(Transform3D(), instance_data.prev_transform); + RendererRD::MaterialStorage::store_transform(Transform3D(), instance_data.transform); + RendererRD::MaterialStorage::store_transform(Transform3D(), instance_data.prev_transform); } instance_data.flags = inst->flags_cache; @@ -1397,7 +1398,7 @@ void RenderForwardClustered::_setup_lightmaps(const PagedArray<RID> &p_lightmaps Basis to_lm = lightmap_instance_get_transform(p_lightmaps[i]).basis.inverse() * p_cam_transform.basis; to_lm = to_lm.inverse().transposed(); //will transform normals - RendererStorageRD::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform); + RendererRD::MaterialStorage::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform); scene_state.lightmap_ids[i] = p_lightmaps[i]; scene_state.lightmap_has_sh[i] = RendererRD::LightStorage::get_singleton()->lightmap_uses_spherical_harmonics(lightmap); @@ -1798,7 +1799,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co } else { //just mix specular back RENDER_TIMESTAMP("Merge Specular"); - storage->get_effects()->merge_specular(color_only_framebuffer, render_buffer->specular, render_buffer->msaa == RS::VIEWPORT_MSAA_DISABLED ? RID() : render_buffer->color, RID()); + RendererCompositorRD::singleton->get_effects()->merge_specular(color_only_framebuffer, render_buffer->specular, render_buffer->msaa == RS::VIEWPORT_MSAA_DISABLED ? RID() : render_buffer->color, RID()); } } @@ -2189,7 +2190,7 @@ void RenderForwardClustered::_render_sdfgi(RID p_render_buffers, const Vector3i to_bounds.origin = p_bounds.position; to_bounds.basis.scale(p_bounds.size); - RendererStorageRD::store_transform(to_bounds.affine_inverse() * render_data.cam_transform, scene_state.ubo.sdf_to_bounds); + RendererRD::MaterialStorage::store_transform(to_bounds.affine_inverse() * render_data.cam_transform, scene_state.ubo.sdf_to_bounds); _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); @@ -2888,7 +2889,7 @@ void RenderForwardClustered::_geometry_instance_add_surface_with_material(Geomet sdcache->surface_index = p_surface; if (ginstance->data->dirty_dependencies) { - storage->base_update_dependency(p_mesh, &ginstance->data->dependency_tracker); + RSG::utilities->base_update_dependency(p_mesh, &ginstance->data->dependency_tracker); } //shadow @@ -3131,16 +3132,16 @@ void RenderForwardClustered::_update_dirty_geometry_instances() { } } -void RenderForwardClustered::_geometry_instance_dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *p_tracker) { +void RenderForwardClustered::_geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker) { switch (p_notification) { - case RendererStorage::DEPENDENCY_CHANGED_MATERIAL: - case RendererStorage::DEPENDENCY_CHANGED_MESH: - case RendererStorage::DEPENDENCY_CHANGED_PARTICLES: - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH: - case RendererStorage::DEPENDENCY_CHANGED_SKELETON_DATA: { + case Dependency::DEPENDENCY_CHANGED_MATERIAL: + case Dependency::DEPENDENCY_CHANGED_MESH: + case Dependency::DEPENDENCY_CHANGED_PARTICLES: + case Dependency::DEPENDENCY_CHANGED_MULTIMESH: + case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: { static_cast<RenderForwardClustered *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata)); } break; - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: { + case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: { GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_tracker->userdata); if (ginstance->data->base_type == RS::INSTANCE_MULTIMESH) { ginstance->instance_count = RendererRD::MeshStorage::get_singleton()->multimesh_get_instances_to_draw(ginstance->data->base); @@ -3151,12 +3152,12 @@ void RenderForwardClustered::_geometry_instance_dependency_changed(RendererStora } break; } } -void RenderForwardClustered::_geometry_instance_dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *p_tracker) { +void RenderForwardClustered::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) { static_cast<RenderForwardClustered *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata)); } RendererSceneRender::GeometryInstance *RenderForwardClustered::geometry_instance_create(RID p_base) { - RS::InstanceType type = storage->get_base_type(p_base); + RS::InstanceType type = RSG::utilities->get_base_type(p_base); ERR_FAIL_COND_V(!((1 << type) & RS::INSTANCE_GEOMETRY_MASK), nullptr); GeometryInstanceForwardClustered *ginstance = geometry_instance_alloc.alloc(); @@ -3420,8 +3421,7 @@ void RenderForwardClustered::_update_shader_quality_settings() { _base_uniforms_changed(); //also need this } -RenderForwardClustered::RenderForwardClustered(RendererStorageRD *p_storage) : - RendererSceneRenderRD(p_storage) { +RenderForwardClustered::RenderForwardClustered() { singleton = this; /* SCENE SHADER */ @@ -3453,7 +3453,7 @@ RenderForwardClustered::RenderForwardClustered(RendererStorageRD *p_storage) : defines += "\n#define MATERIAL_UNIFORM_SET " + itos(MATERIAL_UNIFORM_SET) + "\n"; } - scene_shader.init(p_storage, defines); + scene_shader.init(defines); } render_list_thread_threshold = GLOBAL_GET("rendering/limits/forward_renderer/threaded_render_minimum_instances"); 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 83f69e0674..9e1f1b9954 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h @@ -36,8 +36,8 @@ #include "servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h" #include "servers/rendering/renderer_rd/pipeline_cache_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl.gen.h" +#include "servers/rendering/renderer_rd/storage_rd/utilities.h" namespace RendererSceneRenderImplementation { @@ -541,7 +541,7 @@ class RenderForwardClustered : public RendererSceneRenderRD { bool mirror = false; bool dirty_dependencies = false; - RendererStorage::DependencyTracker dependency_tracker; + DependencyTracker dependency_tracker; }; Data *data = nullptr; @@ -550,8 +550,8 @@ class RenderForwardClustered : public RendererSceneRenderRD { dirty_list_element(this) {} }; - static void _geometry_instance_dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *p_tracker); - static void _geometry_instance_dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *p_tracker); + static void _geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker); + static void _geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker); SelfList<GeometryInstanceForwardClustered>::List geometry_instance_dirty_list; @@ -683,7 +683,7 @@ public: virtual bool free(RID p_rid) override; - RenderForwardClustered(RendererStorageRD *p_storage); + RenderForwardClustered(); ~RenderForwardClustered(); }; } // namespace RendererSceneRenderImplementation 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 aada989bcb..1951bfe915 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 @@ -520,9 +520,8 @@ SceneShaderForwardClustered::~SceneShaderForwardClustered() { material_storage->material_free(default_material); } -void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const String p_defines) { +void SceneShaderForwardClustered::init(const String p_defines) { RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - storage = p_storage; { Vector<String> shader_versions; diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h index ffa3893b6a..1cfe723174 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h @@ -32,7 +32,6 @@ #define RSSR_SCENE_SHADER_FC_H #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl.gen.h" namespace RendererSceneRenderImplementation { @@ -42,8 +41,6 @@ private: static SceneShaderForwardClustered *singleton; public: - RendererStorageRD *storage = nullptr; - enum ShaderVersion { SHADER_VERSION_DEPTH_PASS, SHADER_VERSION_DEPTH_PASS_DP, @@ -249,7 +246,7 @@ public: SceneShaderForwardClustered(); ~SceneShaderForwardClustered(); - void init(RendererStorageRD *p_storage, const String p_defines); + void init(const String p_defines); void set_default_specialization_constants(const Vector<RD::PipelineSpecializationConstant> &p_constants); }; 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 25acd2e25f..e1855ddb36 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp @@ -465,7 +465,7 @@ void RenderForwardMobile::_setup_lightmaps(const PagedArray<RID> &p_lightmaps, c Basis to_lm = lightmap_instance_get_transform(p_lightmaps[i]).basis.inverse() * p_cam_transform.basis; to_lm = to_lm.inverse().transposed(); //will transform normals - RendererStorageRD::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform); + RendererRD::MaterialStorage::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform); scene_state.lightmap_ids[i] = p_lightmaps[i]; scene_state.lightmap_has_sh[i] = RendererRD::LightStorage::get_singleton()->lightmap_uses_spherical_harmonics(lightmap); @@ -1534,15 +1534,15 @@ void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, CameraMatrix projection = correction * p_render_data->cam_projection; //store camera into ubo - RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix); - RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix); - RendererStorageRD::store_transform(p_render_data->cam_transform, scene_state.ubo.inv_view_matrix); - RendererStorageRD::store_transform(p_render_data->cam_transform.affine_inverse(), scene_state.ubo.view_matrix); + RendererRD::MaterialStorage::store_camera(projection, scene_state.ubo.projection_matrix); + RendererRD::MaterialStorage::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix); + RendererRD::MaterialStorage::store_transform(p_render_data->cam_transform, scene_state.ubo.inv_view_matrix); + RendererRD::MaterialStorage::store_transform(p_render_data->cam_transform.affine_inverse(), scene_state.ubo.view_matrix); for (uint32_t v = 0; v < p_render_data->view_count; v++) { projection = correction * p_render_data->view_projection[v]; - RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix_view[v]); - RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]); + RendererRD::MaterialStorage::store_camera(projection, scene_state.ubo.projection_matrix_view[v]); + RendererRD::MaterialStorage::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]); scene_state.ubo.eye_offset[v][0] = p_render_data->view_eye_offset[v].x; scene_state.ubo.eye_offset[v][1] = p_render_data->view_eye_offset[v].y; @@ -1555,10 +1555,10 @@ void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, scene_state.ubo.pancake_shadows = p_pancake_shadows; - RendererStorageRD::store_soft_shadow_kernel(directional_penumbra_shadow_kernel_get(), scene_state.ubo.directional_penumbra_shadow_kernel); - RendererStorageRD::store_soft_shadow_kernel(directional_soft_shadow_kernel_get(), scene_state.ubo.directional_soft_shadow_kernel); - RendererStorageRD::store_soft_shadow_kernel(penumbra_shadow_kernel_get(), scene_state.ubo.penumbra_shadow_kernel); - RendererStorageRD::store_soft_shadow_kernel(soft_shadow_kernel_get(), scene_state.ubo.soft_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(directional_penumbra_shadow_kernel_get(), scene_state.ubo.directional_penumbra_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(directional_soft_shadow_kernel_get(), scene_state.ubo.directional_soft_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(penumbra_shadow_kernel_get(), scene_state.ubo.penumbra_shadow_kernel); + RendererRD::MaterialStorage::store_soft_shadow_kernel(soft_shadow_kernel_get(), scene_state.ubo.soft_shadow_kernel); Size2 screen_pixel_size = Vector2(1.0, 1.0) / Size2(p_screen_size); scene_state.ubo.screen_pixel_size[0] = screen_pixel_size.x; @@ -1648,7 +1648,7 @@ void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, Basis sky_transform = environment_get_sky_orientation(p_render_data->environment); sky_transform = sky_transform.inverse() * p_render_data->cam_transform.basis; - RendererStorageRD::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform); + RendererRD::MaterialStorage::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform); scene_state.ubo.use_ambient_cubemap = (ambient_src == RS::ENV_AMBIENT_SOURCE_BG && env_bg == RS::ENV_BG_SKY) || ambient_src == RS::ENV_AMBIENT_SOURCE_SKY; scene_state.ubo.use_ambient_light = scene_state.ubo.use_ambient_cubemap || ambient_src == RS::ENV_AMBIENT_SOURCE_COLOR; @@ -1866,9 +1866,9 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr GeometryInstanceForwardMobile::PushConstant push_constant; if (inst->store_transform_cache) { - RendererStorageRD::store_transform(inst->transform, push_constant.transform); + RendererRD::MaterialStorage::store_transform(inst->transform, push_constant.transform); } else { - RendererStorageRD::store_transform(Transform3D(), push_constant.transform); + RendererRD::MaterialStorage::store_transform(Transform3D(), push_constant.transform); } push_constant.flags = inst->flags_cache; @@ -2032,7 +2032,7 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr /* Geometry instance */ RendererSceneRender::GeometryInstance *RenderForwardMobile::geometry_instance_create(RID p_base) { - RS::InstanceType type = storage->get_base_type(p_base); + RS::InstanceType type = RSG::utilities->get_base_type(p_base); ERR_FAIL_COND_V(!((1 << type) & RS::INSTANCE_GEOMETRY_MASK), nullptr); GeometryInstanceForwardMobile *ginstance = geometry_instance_alloc.alloc(); @@ -2373,7 +2373,7 @@ void RenderForwardMobile::_geometry_instance_add_surface_with_material(GeometryI sdcache->surface_index = p_surface; if (ginstance->data->dirty_dependencies) { - storage->base_update_dependency(p_mesh, &ginstance->data->dependency_tracker); + RSG::utilities->base_update_dependency(p_mesh, &ginstance->data->dependency_tracker); } //shadow @@ -2609,16 +2609,16 @@ void RenderForwardMobile::_update_dirty_geometry_instances() { } } -void RenderForwardMobile::_geometry_instance_dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *p_tracker) { +void RenderForwardMobile::_geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker) { switch (p_notification) { - case RendererStorage::DEPENDENCY_CHANGED_MATERIAL: - case RendererStorage::DEPENDENCY_CHANGED_MESH: - case RendererStorage::DEPENDENCY_CHANGED_PARTICLES: - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH: - case RendererStorage::DEPENDENCY_CHANGED_SKELETON_DATA: { + case Dependency::DEPENDENCY_CHANGED_MATERIAL: + case Dependency::DEPENDENCY_CHANGED_MESH: + case Dependency::DEPENDENCY_CHANGED_PARTICLES: + case Dependency::DEPENDENCY_CHANGED_MULTIMESH: + case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: { static_cast<RenderForwardMobile *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata)); } break; - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: { + case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: { GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_tracker->userdata); if (ginstance->data->base_type == RS::INSTANCE_MULTIMESH) { ginstance->instance_count = RendererRD::MeshStorage::get_singleton()->multimesh_get_instances_to_draw(ginstance->data->base); @@ -2629,7 +2629,7 @@ void RenderForwardMobile::_geometry_instance_dependency_changed(RendererStorage: } break; } } -void RenderForwardMobile::_geometry_instance_dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *p_tracker) { +void RenderForwardMobile::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) { static_cast<RenderForwardMobile *>(singleton)->_geometry_instance_mark_dirty(static_cast<GeometryInstance *>(p_tracker->userdata)); } @@ -2695,8 +2695,7 @@ void RenderForwardMobile::_update_shader_quality_settings() { _base_uniforms_changed(); //also need this } -RenderForwardMobile::RenderForwardMobile(RendererStorageRD *p_storage) : - RendererSceneRenderRD(p_storage) { +RenderForwardMobile::RenderForwardMobile() { singleton = this; sky.set_texture_format(_render_buffers_get_color_format()); @@ -2728,7 +2727,7 @@ RenderForwardMobile::RenderForwardMobile(RendererStorageRD *p_storage) : defines += "\n#define MATERIAL_UNIFORM_SET " + itos(MATERIAL_UNIFORM_SET) + "\n"; } - scene_shader.init(p_storage, defines); + scene_shader.init(defines); // !BAS! maybe we need a mobile version of this setting? render_list_thread_threshold = GLOBAL_GET("rendering/limits/forward_renderer/threaded_render_minimum_instances"); 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 82e6c52c43..473a58045c 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h @@ -35,7 +35,7 @@ #include "servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h" #include "servers/rendering/renderer_rd/pipeline_cache_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" +#include "servers/rendering/renderer_rd/storage_rd/utilities.h" namespace RendererSceneRenderImplementation { @@ -597,7 +597,7 @@ protected: bool dirty_dependencies = false; - RendererStorage::DependencyTracker dependency_tracker; + DependencyTracker dependency_tracker; }; Data *data = nullptr; @@ -613,8 +613,8 @@ protected: public: virtual RID reflection_probe_create_framebuffer(RID p_color, RID p_depth) override; - static void _geometry_instance_dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *p_tracker); - static void _geometry_instance_dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *p_tracker); + static void _geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker); + static void _geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker); SelfList<GeometryInstanceForwardMobile>::List geometry_instance_dirty_list; @@ -668,7 +668,7 @@ public: virtual bool is_volumetric_supported() const override; virtual uint32_t get_max_elements() const override; - RenderForwardMobile(RendererStorageRD *p_storage); + RenderForwardMobile(); ~RenderForwardMobile(); }; } // namespace RendererSceneRenderImplementation 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 f66ad529de..dd00dc2bf9 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 @@ -466,8 +466,7 @@ SceneShaderForwardMobile::SceneShaderForwardMobile() { singleton = this; } -void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p_defines) { - storage = p_storage; +void SceneShaderForwardMobile::init(const String p_defines) { RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); /* SCENE SHADER */ diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h index f325d5c0a5..88c2143b09 100644 --- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h @@ -32,7 +32,6 @@ #define RSSR_SCENE_SHADER_FM_H #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl.gen.h" namespace RendererSceneRenderImplementation { @@ -40,7 +39,6 @@ namespace RendererSceneRenderImplementation { class SceneShaderForwardMobile { private: static SceneShaderForwardMobile *singleton; - RendererStorageRD *storage = nullptr; public: enum ShaderVersion { @@ -207,7 +205,7 @@ public: Vector<RD::PipelineSpecializationConstant> default_specialization_constants; - void init(RendererStorageRD *p_storage, const String p_defines); + void init(const String p_defines); void set_default_specialization_constants(const Vector<RD::PipelineSpecializationConstant> &p_constants); }; diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp index 3c2f3f8a42..b87b189d53 100644 --- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp @@ -2270,10 +2270,9 @@ void RendererCanvasRenderRD::set_time(double p_time) { void RendererCanvasRenderRD::update() { } -RendererCanvasRenderRD::RendererCanvasRenderRD(RendererStorageRD *p_storage) { +RendererCanvasRenderRD::RendererCanvasRenderRD() { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - storage = p_storage; { //create default samplers diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.h b/servers/rendering/renderer_rd/renderer_canvas_render_rd.h index 04881ce7e6..2ab5a7c831 100644 --- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.h +++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.h @@ -34,15 +34,13 @@ #include "servers/rendering/renderer_canvas_render.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_rd/pipeline_cache_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/canvas.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/canvas_occlusion.glsl.gen.h" +#include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/rendering_device.h" #include "servers/rendering/shader_compiler.h" class RendererCanvasRenderRD : public RendererCanvasRender { - RendererStorageRD *storage = nullptr; - enum { BASE_UNIFORM_SET = 0, MATERIAL_UNIFORM_SET = 1, @@ -462,7 +460,7 @@ public: void set_time(double p_time); void update(); bool free(RID p_rid); - RendererCanvasRenderRD(RendererStorageRD *p_storage); + RendererCanvasRenderRD(); ~RendererCanvasRenderRD(); }; diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp index 759b8690eb..a61172c8f5 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp @@ -154,12 +154,14 @@ uint64_t RendererCompositorRD::frame = 1; void RendererCompositorRD::finalize() { memdelete(scene); memdelete(canvas); - memdelete(storage); + memdelete(effects); + memdelete(fog); memdelete(particles_storage); memdelete(light_storage); memdelete(mesh_storage); memdelete(material_storage); memdelete(texture_storage); + memdelete(utilities); //only need to erase these, the rest are erased by cascade blit.shader.version_free(blit.shader_version); @@ -287,28 +289,29 @@ RendererCompositorRD::RendererCompositorRD() { singleton = this; + utilities = memnew(RendererRD::Utilities); texture_storage = memnew(RendererRD::TextureStorage); material_storage = memnew(RendererRD::MaterialStorage); mesh_storage = memnew(RendererRD::MeshStorage); light_storage = memnew(RendererRD::LightStorage); particles_storage = memnew(RendererRD::ParticlesStorage); - storage = memnew(RendererStorageRD); - canvas = memnew(RendererCanvasRenderRD(storage)); + fog = memnew(RendererRD::Fog); + canvas = memnew(RendererCanvasRenderRD()); back_end = (bool)(int)GLOBAL_GET("rendering/vulkan/rendering/back_end"); uint64_t textures_per_stage = RD::get_singleton()->limit_get(RD::LIMIT_MAX_TEXTURES_PER_SHADER_STAGE); if (back_end || textures_per_stage < 48) { - scene = memnew(RendererSceneRenderImplementation::RenderForwardMobile(storage)); + scene = memnew(RendererSceneRenderImplementation::RenderForwardMobile()); } else { // back_end == false // default to our high end renderer - scene = memnew(RendererSceneRenderImplementation::RenderForwardClustered(storage)); + scene = memnew(RendererSceneRenderImplementation::RenderForwardClustered()); } scene->init(); // now we're ready to create our effects, - storage->init_effects(!scene->_render_buffers_can_be_storage()); + effects = memnew(EffectsRD(!scene->_render_buffers_can_be_storage())); } RendererCompositorRD::~RendererCompositorRD() { diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.h b/servers/rendering/renderer_rd/renderer_compositor_rd.h index 12bcfc4684..2be55743fb 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.h +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.h @@ -34,28 +34,32 @@ #include "core/os/os.h" #include "core/templates/thread_work_pool.h" #include "servers/rendering/renderer_compositor.h" +#include "servers/rendering/renderer_rd/effects_rd.h" +#include "servers/rendering/renderer_rd/environment/fog.h" #include "servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h" #include "servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h" #include "servers/rendering/renderer_rd/renderer_canvas_render_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/blit.glsl.gen.h" #include "servers/rendering/renderer_rd/storage_rd/light_storage.h" #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_rd/storage_rd/mesh_storage.h" #include "servers/rendering/renderer_rd/storage_rd/particles_storage.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" +#include "servers/rendering/renderer_rd/storage_rd/utilities.h" #include "servers/rendering/renderer_rd/uniform_set_cache_rd.h" class RendererCompositorRD : public RendererCompositor { protected: UniformSetCacheRD *uniform_set_cache = nullptr; RendererCanvasRenderRD *canvas = nullptr; + RendererRD::Utilities *utilities = nullptr; RendererRD::LightStorage *light_storage = nullptr; RendererRD::MaterialStorage *material_storage = nullptr; RendererRD::MeshStorage *mesh_storage = nullptr; RendererRD::ParticlesStorage *particles_storage = nullptr; RendererRD::TextureStorage *texture_storage = nullptr; - RendererStorageRD *storage = nullptr; + RendererRD::Fog *fog = nullptr; + EffectsRD *effects = nullptr; RendererSceneRenderRD *scene = nullptr; enum BlitMode { @@ -98,6 +102,7 @@ protected: static uint64_t frame; public: + RendererUtilities *get_utilities() { return utilities; }; RendererLightStorage *get_light_storage() { return light_storage; } RendererMaterialStorage *get_material_storage() { return material_storage; } RendererMeshStorage *get_mesh_storage() { return mesh_storage; } @@ -107,7 +112,8 @@ public: ERR_FAIL_NULL_V(scene, nullptr); return scene->get_gi(); } - RendererStorage *get_storage() { return storage; } + RendererFog *get_fog() { return fog; } + EffectsRD *get_effects() { return effects; } RendererCanvasRender *get_canvas() { return canvas; } RendererSceneRender *get_scene() { return scene; } diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index eb4bc3d535..bf4f3546c1 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -33,6 +33,7 @@ #include "core/config/project_settings.h" #include "core/os/os.h" #include "renderer_compositor_rd.h" +#include "servers/rendering/renderer_rd/environment/fog.h" #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" #include "servers/rendering/rendering_server_default.h" @@ -534,7 +535,7 @@ Ref<Image> RendererSceneRenderRD::environment_bake_panorama(RID p_env, bool p_ba return panorama; } else { const float bg_energy = env->bg_energy; - Color panorama_color = ((environment_background == RS::ENV_BG_CLEAR_COLOR) ? storage->get_default_clear_color() : env->bg_color); + Color panorama_color = ((environment_background == RS::ENV_BG_CLEAR_COLOR) ? RSG::texture_storage->get_default_clear_color() : env->bg_color); panorama_color = panorama_color.srgb_to_linear(); panorama_color.r *= bg_energy; panorama_color.g *= bg_energy; @@ -759,7 +760,7 @@ bool RendererSceneRenderRD::reflection_probe_instance_begin_render(RID p_instanc } atlas->reflections.resize(atlas->count); for (int i = 0; i < atlas->count; i++) { - atlas->reflections.write[i].data.update_reflection_data(storage, atlas->size, mipmaps, false, atlas->reflection, i * 6, RSG::light_storage->reflection_probe_get_update_mode(rpi->probe) == RS::REFLECTION_PROBE_UPDATE_ALWAYS, sky.roughness_layers, _render_buffers_get_color_format()); + atlas->reflections.write[i].data.update_reflection_data(atlas->size, mipmaps, false, atlas->reflection, i * 6, RSG::light_storage->reflection_probe_get_update_mode(rpi->probe) == RS::REFLECTION_PROBE_UPDATE_ALWAYS, sky.roughness_layers, _render_buffers_get_color_format()); for (int j = 0; j < 6; j++) { atlas->reflections.write[i].fbs[j] = reflection_probe_create_framebuffer(atlas->reflections.write[i].data.layers[0].mipmaps[0].views[j], atlas->depth_buffer); } @@ -829,7 +830,7 @@ bool RendererSceneRenderRD::reflection_probe_instance_postprocess_step(RID p_ins if (RSG::light_storage->reflection_probe_get_update_mode(rpi->probe) == RS::REFLECTION_PROBE_UPDATE_ALWAYS) { // Using real time reflections, all roughness is done in one step - atlas->reflections.write[rpi->atlas_index].data.create_reflection_fast_filter(storage, false); + atlas->reflections.write[rpi->atlas_index].data.create_reflection_fast_filter(false); rpi->rendering = false; rpi->processing_side = 0; rpi->processing_layer = 1; @@ -837,7 +838,7 @@ bool RendererSceneRenderRD::reflection_probe_instance_postprocess_step(RID p_ins } if (rpi->processing_layer > 1) { - atlas->reflections.write[rpi->atlas_index].data.create_reflection_importance_sample(storage, false, 10, rpi->processing_layer, sky.sky_ggx_samples_quality); + atlas->reflections.write[rpi->atlas_index].data.create_reflection_importance_sample(false, 10, rpi->processing_layer, sky.sky_ggx_samples_quality); rpi->processing_layer++; if (rpi->processing_layer == atlas->reflections[rpi->atlas_index].data.layers[0].mipmaps.size()) { rpi->rendering = false; @@ -848,7 +849,7 @@ bool RendererSceneRenderRD::reflection_probe_instance_postprocess_step(RID p_ins return false; } else { - atlas->reflections.write[rpi->atlas_index].data.create_reflection_importance_sample(storage, false, rpi->processing_side, rpi->processing_layer, sky.sky_ggx_samples_quality); + atlas->reflections.write[rpi->atlas_index].data.create_reflection_importance_sample(false, rpi->processing_side, rpi->processing_layer, sky.sky_ggx_samples_quality); } rpi->processing_side++; @@ -1968,7 +1969,7 @@ void RendererSceneRenderRD::_process_sss(RID p_render_buffers, const CameraMatri _allocate_blur_textures(rb); } - storage->get_effects()->sub_surface_scattering(rb->internal_texture, rb->sss_texture, rb->depth_texture, p_camera, Size2i(rb->internal_width, rb->internal_height), sss_scale, sss_depth_scale, sss_quality); + RendererCompositorRD::singleton->get_effects()->sub_surface_scattering(rb->internal_texture, rb->sss_texture, rb->depth_texture, p_camera, Size2i(rb->internal_width, rb->internal_height), sss_scale, sss_depth_scale, sss_quality); } void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_framebuffer, RID p_normal_buffer, RID p_specular_buffer, RID p_metallic, const Color &p_metallic_mask, RID p_environment, const CameraMatrix &p_projection, bool p_use_additive) { @@ -1979,7 +1980,7 @@ void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_frameb if (!can_use_effects) { //just copy - storage->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->internal_texture, RID()); + RendererCompositorRD::singleton->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->internal_texture, RID()); return; } @@ -2019,8 +2020,8 @@ void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_frameb _allocate_blur_textures(rb); } - storage->get_effects()->screen_space_reflection(rb->internal_texture, p_normal_buffer, ssr_roughness_quality, rb->ssr.blur_radius[0], rb->ssr.blur_radius[1], p_metallic, p_metallic_mask, rb->depth_texture, rb->ssr.depth_scaled, rb->ssr.normal_scaled, rb->blur[0].layers[0].mipmaps[1].texture, rb->blur[1].layers[0].mipmaps[0].texture, Size2i(rb->internal_width / 2, rb->internal_height / 2), env->ssr_max_steps, env->ssr_fade_in, env->ssr_fade_out, env->ssr_depth_tolerance, p_projection); - storage->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->internal_texture, rb->blur[0].layers[0].mipmaps[1].texture); + RendererCompositorRD::singleton->get_effects()->screen_space_reflection(rb->internal_texture, p_normal_buffer, ssr_roughness_quality, rb->ssr.blur_radius[0], rb->ssr.blur_radius[1], p_metallic, p_metallic_mask, rb->depth_texture, rb->ssr.depth_scaled, rb->ssr.normal_scaled, rb->blur[0].layers[0].mipmaps[1].texture, rb->blur[1].layers[0].mipmaps[0].texture, Size2i(rb->internal_width / 2, rb->internal_height / 2), env->ssr_max_steps, env->ssr_fade_in, env->ssr_fade_out, env->ssr_depth_tolerance, p_projection); + RendererCompositorRD::singleton->get_effects()->merge_specular(p_dest_framebuffer, p_specular_buffer, p_use_additive ? RID() : rb->internal_texture, rb->blur[0].layers[0].mipmaps[1].texture); } void RendererSceneRenderRD::_process_ssao(RID p_render_buffers, RID p_environment, RID p_normal_buffer, const CameraMatrix &p_projection) { @@ -2145,7 +2146,7 @@ void RendererSceneRenderRD::_process_ssao(RID p_render_buffers, RID p_environmen settings.half_screen_size = Size2i(buffer_width, buffer_height); settings.quarter_screen_size = Size2i(half_width, half_height); - storage->get_effects()->generate_ssao(p_normal_buffer, rb->ss_effects.ssao.depth_texture_view, rb->ss_effects.ssao.ao_deinterleaved, rb->ss_effects.ssao.ao_deinterleaved_slices, rb->ss_effects.ssao.ao_pong, rb->ss_effects.ssao.ao_pong_slices, rb->ss_effects.ssao.ao_final, rb->ss_effects.ssao.importance_map[0], rb->ss_effects.ssao.importance_map[1], p_projection, settings, uniform_sets_are_invalid, rb->ss_effects.ssao.gather_uniform_set, rb->ss_effects.ssao.importance_map_uniform_set); + RendererCompositorRD::singleton->get_effects()->generate_ssao(p_normal_buffer, rb->ss_effects.ssao.depth_texture_view, rb->ss_effects.ssao.ao_deinterleaved, rb->ss_effects.ssao.ao_deinterleaved_slices, rb->ss_effects.ssao.ao_pong, rb->ss_effects.ssao.ao_pong_slices, rb->ss_effects.ssao.ao_final, rb->ss_effects.ssao.importance_map[0], rb->ss_effects.ssao.importance_map[1], p_projection, settings, uniform_sets_are_invalid, rb->ss_effects.ssao.gather_uniform_set, rb->ss_effects.ssao.importance_map_uniform_set); } void RendererSceneRenderRD::_process_ssil(RID p_render_buffers, RID p_environment, RID p_normal_buffer, const CameraMatrix &p_projection, const Transform3D &p_transform) { @@ -2306,7 +2307,7 @@ void RendererSceneRenderRD::_process_ssil(RID p_render_buffers, RID p_environmen transform.set_origin(Vector3(0.0, 0.0, 0.0)); CameraMatrix last_frame_projection = rb->ss_effects.last_frame_projection * CameraMatrix(rb->ss_effects.last_frame_transform.affine_inverse()) * CameraMatrix(transform) * projection.inverse(); - storage->get_effects()->screen_space_indirect_lighting(rb->ss_effects.last_frame, rb->ss_effects.ssil.ssil_final, p_normal_buffer, rb->ss_effects.ssil.depth_texture_view, rb->ss_effects.ssil.deinterleaved, rb->ss_effects.ssil.deinterleaved_slices, rb->ss_effects.ssil.pong, rb->ss_effects.ssil.pong_slices, rb->ss_effects.ssil.importance_map[0], rb->ss_effects.ssil.importance_map[1], rb->ss_effects.ssil.edges, rb->ss_effects.ssil.edges_slices, p_projection, last_frame_projection, settings, uniform_sets_are_invalid, rb->ss_effects.ssil.gather_uniform_set, rb->ss_effects.ssil.importance_map_uniform_set, rb->ss_effects.ssil.projection_uniform_set); + RendererCompositorRD::singleton->get_effects()->screen_space_indirect_lighting(rb->ss_effects.last_frame, rb->ss_effects.ssil.ssil_final, p_normal_buffer, rb->ss_effects.ssil.depth_texture_view, rb->ss_effects.ssil.deinterleaved, rb->ss_effects.ssil.deinterleaved_slices, rb->ss_effects.ssil.pong, rb->ss_effects.ssil.pong_slices, rb->ss_effects.ssil.importance_map[0], rb->ss_effects.ssil.importance_map[1], rb->ss_effects.ssil.edges, rb->ss_effects.ssil.edges_slices, p_projection, last_frame_projection, settings, uniform_sets_are_invalid, rb->ss_effects.ssil.gather_uniform_set, rb->ss_effects.ssil.importance_map_uniform_set, rb->ss_effects.ssil.projection_uniform_set); rb->ss_effects.last_frame_projection = projection; rb->ss_effects.last_frame_transform = transform; } @@ -2354,7 +2355,7 @@ void RendererSceneRenderRD::_process_taa(RID p_render_buffers, RID p_velocity_bu RD::get_singleton()->draw_command_begin_label("TAA"); if (!just_allocated) { - storage->get_effects()->taa_resolve(rb->internal_texture, rb->taa.temp, rb->depth_texture, p_velocity_buffer, rb->taa.prev_velocity, rb->taa.history, Size2(rb->internal_width, rb->internal_height), p_z_near, p_z_far); + RendererCompositorRD::singleton->get_effects()->taa_resolve(rb->internal_texture, rb->taa.temp, rb->depth_texture, p_velocity_buffer, rb->taa.prev_velocity, rb->taa.history, Size2(rb->internal_width, rb->internal_height), p_z_near, p_z_far); copy_effects->copy_to_rect(rb->taa.temp, rb->internal_texture, Rect2(0, 0, rb->internal_width, rb->internal_height)); } @@ -2492,9 +2493,9 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende double step = env->auto_exp_speed * time_step; if (can_use_storage) { - storage->get_effects()->luminance_reduction(rb->internal_texture, Size2i(rb->internal_width, rb->internal_height), rb->luminance.reduce, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate); + RendererCompositorRD::singleton->get_effects()->luminance_reduction(rb->internal_texture, Size2i(rb->internal_width, rb->internal_height), rb->luminance.reduce, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate); } else { - storage->get_effects()->luminance_reduction_raster(rb->internal_texture, Size2i(rb->internal_width, rb->internal_height), rb->luminance.reduce, rb->luminance.fb, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate); + RendererCompositorRD::singleton->get_effects()->luminance_reduction_raster(rb->internal_texture, Size2i(rb->internal_width, rb->internal_height), rb->luminance.reduce, rb->luminance.fb, rb->luminance.current, env->min_luminance, env->max_luminance, step, set_immediate); } // Swap final reduce with prev luminance. SWAP(rb->luminance.current, rb->luminance.reduce.write[rb->luminance.reduce.size() - 1]); @@ -2639,7 +2640,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende if (can_use_effects && can_use_storage && (rb->internal_width != rb->width || rb->internal_height != rb->height)) { RD::get_singleton()->draw_command_begin_label("FSR 1.0 Upscale"); - storage->get_effects()->fsr_upscale(rb->internal_texture, rb->upscale_texture, rb->texture, Size2i(rb->internal_width, rb->internal_height), Size2i(rb->width, rb->height), rb->fsr_sharpness); + RendererCompositorRD::singleton->get_effects()->fsr_upscale(rb->internal_texture, rb->upscale_texture, rb->texture, Size2i(rb->internal_width, rb->internal_height), Size2i(rb->width, rb->height), rb->fsr_sharpness); RD::get_singleton()->draw_command_end_label(); } @@ -3364,7 +3365,7 @@ void RendererSceneRenderRD::_setup_reflections(const PagedArray<RID> &p_reflecti Transform3D transform = rpi->transform; Transform3D proj = (p_camera_inverse_transform * transform).inverse(); - RendererStorageRD::store_transform(proj, reflection_ubo.local_matrix); + RendererRD::MaterialStorage::store_transform(proj, reflection_ubo.local_matrix); if (current_cluster_builder != nullptr) { current_cluster_builder->add_box(ClusterBuilderRD::BOX_TYPE_REFLECTION_PROBE, transform, extents); @@ -3482,7 +3483,7 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const light_data.shadow_transmittance_bias[j] = light_storage->light_get_transmittance_bias(base) * bias_scale; light_data.shadow_z_range[j] = li->shadow_transform[j].farplane; light_data.shadow_range_begin[j] = li->shadow_transform[j].range_begin; - RendererStorageRD::store_camera(shadow_mtx, light_data.shadow_matrices[j]); + RendererRD::MaterialStorage::store_camera(shadow_mtx, light_data.shadow_matrices[j]); Vector2 uv_scale = li->shadow_transform[j].uv_scale; uv_scale *= atlas_rect.size; //adapt to atlas size @@ -3727,7 +3728,7 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const if (type == RS::LIGHT_OMNI) { Transform3D proj = (inverse_transform * light_transform).inverse(); - RendererStorageRD::store_transform(proj, light_data.shadow_matrix); + RendererRD::MaterialStorage::store_transform(proj, light_data.shadow_matrix); if (size > 0.0 && light_data.soft_shadow_scale > 0.0) { // Only enable PCSS-like soft shadows if blurring is enabled. @@ -3746,7 +3747,7 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const bias.set_light_bias(); CameraMatrix shadow_mtx = bias * li->shadow_transform[0].camera * modelview; - RendererStorageRD::store_camera(shadow_mtx, light_data.shadow_matrix); + RendererRD::MaterialStorage::store_camera(shadow_mtx, light_data.shadow_matrix); if (size > 0.0 && light_data.soft_shadow_scale > 0.0) { // Only enable PCSS-like soft shadows if blurring is enabled. @@ -3865,7 +3866,7 @@ void RendererSceneRenderRD::_setup_decals(const PagedArray<RID> &p_decals, const Transform3D scale_xform; scale_xform.basis.scale(decal_extents); Transform3D to_decal_xform = (p_camera_inverse_xform * di->transform * scale_xform * uv_xform).affine_inverse(); - RendererStorageRD::store_transform(to_decal_xform, dd.xform); + RendererRD::MaterialStorage::store_transform(to_decal_xform, dd.xform); Vector3 normal = xform.basis.get_column(Vector3::AXIS_Y).normalized(); normal = p_camera_inverse_xform.basis.xform(normal); //camera is normalized, so fine @@ -3903,7 +3904,7 @@ void RendererSceneRenderRD::_setup_decals(const PagedArray<RID> &p_decals, const dd.normal_rect[3] = rect.size.y; Basis normal_xform = p_camera_inverse_xform.basis * xform.basis.orthonormalized(); - RendererStorageRD::store_basis_3x4(normal_xform, dd.normal_xform); + RendererRD::MaterialStorage::store_basis_3x4(normal_xform, dd.normal_xform); } else { dd.normal_rect[0] = 0; dd.normal_rect[1] = 0; @@ -4326,8 +4327,8 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e params.temporal_blend = env->volumetric_fog_temporal_reprojection_amount; Transform3D to_prev_cam_view = p_prev_cam_inv_transform * p_cam_transform; - storage->store_transform(to_prev_cam_view, params.to_prev_view); - storage->store_transform(p_cam_transform, params.transform); + RendererRD::MaterialStorage::store_transform(to_prev_cam_view, params.to_prev_view); + RendererRD::MaterialStorage::store_transform(p_cam_transform, params.transform); RD::get_singleton()->buffer_update(volumetric_fog.volume_ubo, 0, sizeof(VolumetricFogShader::VolumeUBO), ¶ms, RD::BARRIER_MASK_COMPUTE); @@ -4389,7 +4390,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e ERR_FAIL_COND(!fog_volume_instance); RID fog_volume = fog_volume_instance->volume; - RID fog_material = storage->fog_volume_get_material(fog_volume); + RID fog_material = RendererRD::Fog::get_singleton()->fog_volume_get_material(fog_volume); FogMaterialData *material = nullptr; @@ -4418,8 +4419,8 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e Vector3i kernel_size = Vector3i(); Vector3 position = fog_volume_instance->transform.get_origin(); - RS::FogVolumeShape volume_type = storage->fog_volume_get_shape(fog_volume); - Vector3 extents = storage->fog_volume_get_extents(fog_volume); + RS::FogVolumeShape volume_type = RendererRD::Fog::get_singleton()->fog_volume_get_shape(fog_volume); + Vector3 extents = RendererRD::Fog::get_singleton()->fog_volume_get_extents(fog_volume); if (volume_type != RS::FOG_VOLUME_SHAPE_WORLD) { // Local fog volume. @@ -4462,8 +4463,8 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e volumetric_fog.push_constant.corner[0] = min.x; volumetric_fog.push_constant.corner[1] = min.y; volumetric_fog.push_constant.corner[2] = min.z; - volumetric_fog.push_constant.shape = uint32_t(storage->fog_volume_get_shape(fog_volume)); - storage->store_transform(fog_volume_instance->transform.affine_inverse(), volumetric_fog.push_constant.transform); + volumetric_fog.push_constant.shape = uint32_t(RendererRD::Fog::get_singleton()->fog_volume_get_shape(fog_volume)); + RendererRD::MaterialStorage::store_transform(fog_volume_instance->transform.affine_inverse(), volumetric_fog.push_constant.transform); RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, shader_data->pipeline); @@ -4808,7 +4809,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e params.temporal_frame = RSG::rasterizer->get_frame_number() % VolumetricFog::MAX_TEMPORAL_FRAMES; Transform3D to_prev_cam_view = p_prev_cam_inv_transform * p_cam_transform; - storage->store_transform(to_prev_cam_view, params.to_prev_view); + RendererRD::MaterialStorage::store_transform(to_prev_cam_view, params.to_prev_view); params.use_temporal_reprojection = env->volumetric_fog_temporal_reprojection; params.temporal_blend = env->volumetric_fog_temporal_reprojection_amount; @@ -4829,7 +4830,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e Basis sky_transform = env->sky_orientation; sky_transform = sky_transform.inverse() * p_cam_transform.basis; - RendererStorageRD::store_transform_3x3(sky_transform, params.radiance_inverse_xform); + RendererRD::MaterialStorage::store_transform_3x3(sky_transform, params.radiance_inverse_xform); RD::get_singleton()->draw_command_begin_label("Render Volumetric Fog"); @@ -5040,7 +5041,7 @@ void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool invalidate_uniform_set = true; } - storage->get_effects()->downsample_depth(rb->depth_texture, rb->ss_effects.linear_depth_slices, ssao_quality, ssil_quality, invalidate_uniform_set, ssao_half_size, ssil_half_size, Size2i(rb->width, rb->height), p_render_data->cam_projection); + RendererCompositorRD::singleton->get_effects()->downsample_depth(rb->depth_texture, rb->ss_effects.linear_depth_slices, ssao_quality, ssil_quality, invalidate_uniform_set, ssao_half_size, ssil_half_size, Size2i(rb->width, rb->height), p_render_data->cam_projection); } if (p_use_ssao) { @@ -5189,7 +5190,7 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData if (p_render_buffers.is_valid()) { clear_color = texture_storage->render_target_get_clear_request_color(rb->render_target); } else { - clear_color = storage->get_default_clear_color(); + clear_color = RSG::texture_storage->get_default_clear_color(); } //assign render indices to voxel_gi_instances @@ -5754,8 +5755,7 @@ uint32_t RendererSceneRenderRD::get_max_elements() const { return GLOBAL_GET("rendering/limits/cluster_builder/max_clustered_elements"); } -RendererSceneRenderRD::RendererSceneRenderRD(RendererStorageRD *p_storage) { - storage = p_storage; +RendererSceneRenderRD::RendererSceneRenderRD() { singleton = this; } @@ -5769,12 +5769,12 @@ void RendererSceneRenderRD::init() { /* SKY SHADER */ - sky.init(storage); + sky.init(); /* GI */ if (is_dynamic_gi_supported()) { - gi.init(storage, &sky); + gi.init(&sky); } { //decals diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h index 3f03f857f7..e8296882c9 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h @@ -41,7 +41,6 @@ #include "servers/rendering/renderer_rd/environment/gi.h" #include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_sky_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/volumetric_fog.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl.gen.h" #include "servers/rendering/renderer_scene.h" @@ -102,7 +101,6 @@ class RendererSceneRenderRD : public RendererSceneRender { friend RendererRD::GI; protected: - RendererStorageRD *storage = nullptr; RendererRD::BokehDOF *bokeh_dof = nullptr; RendererRD::CopyEffects *copy_effects = nullptr; RendererRD::ToneMapper *tone_mapper = nullptr; @@ -1512,7 +1510,7 @@ public: void init(); - RendererSceneRenderRD(RendererStorageRD *p_storage); + RendererSceneRenderRD(); ~RendererSceneRenderRD(); }; diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp index b3b9b86aa8..73175d3cf3 100644 --- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp @@ -37,6 +37,7 @@ #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" #include "servers/rendering/rendering_server_default.h" +#include "servers/rendering/rendering_server_globals.h" //////////////////////////////////////////////////////////////////////////////// // SKY SHADER @@ -329,13 +330,13 @@ void RendererSceneSkyRD::ReflectionData::clear_reflection_data() { coefficient_buffer = RID(); } -void RendererSceneSkyRD::ReflectionData::update_reflection_data(RendererStorageRD *p_storage, int p_size, int p_mipmaps, bool p_use_array, RID p_base_cube, int p_base_layer, bool p_low_quality, int p_roughness_layers, RD::DataFormat p_texture_format) { +void RendererSceneSkyRD::ReflectionData::update_reflection_data(int p_size, int p_mipmaps, bool p_use_array, RID p_base_cube, int p_base_layer, bool p_low_quality, int p_roughness_layers, RD::DataFormat p_texture_format) { //recreate radiance and all data int mipmaps = p_mipmaps; uint32_t w = p_size, h = p_size; - EffectsRD *effects = p_storage->get_effects(); + EffectsRD *effects = RendererCompositorRD::singleton->get_effects(); ERR_FAIL_NULL_MSG(effects, "Effects haven't been initialised"); bool prefer_raster_effects = effects->get_prefer_raster_effects(); @@ -437,7 +438,7 @@ void RendererSceneSkyRD::ReflectionData::update_reflection_data(RendererStorageR } } -void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererStorageRD *p_storage, bool p_use_arrays) { +void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(bool p_use_arrays) { RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton(); ERR_FAIL_NULL_MSG(copy_effects, "Effects haven't been initialised"); bool prefer_raster_effects = copy_effects->get_prefer_raster_effects(); @@ -495,7 +496,7 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererS } } -void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(RendererStorageRD *p_storage, bool p_use_arrays, int p_cube_side, int p_base_layer, uint32_t p_sky_ggx_samples_quality) { +void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(bool p_use_arrays, int p_cube_side, int p_base_layer, uint32_t p_sky_ggx_samples_quality) { RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton(); ERR_FAIL_NULL_MSG(copy_effects, "Effects haven't been initialised"); bool prefer_raster_effects = copy_effects->get_prefer_raster_effects(); @@ -564,7 +565,7 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren RD::get_singleton()->draw_command_end_label(); // Filter radiance } -void RendererSceneSkyRD::ReflectionData::update_reflection_mipmaps(RendererStorageRD *p_storage, int p_start, int p_end) { +void RendererSceneSkyRD::ReflectionData::update_reflection_mipmaps(int p_start, int p_end) { RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton(); ERR_FAIL_NULL_MSG(copy_effects, "Effects haven't been initialised"); bool prefer_raster_effects = copy_effects->get_prefer_raster_effects(); @@ -591,7 +592,7 @@ void RendererSceneSkyRD::ReflectionData::update_reflection_mipmaps(RendererStora //////////////////////////////////////////////////////////////////////////////// // RendererSceneSkyRD::Sky -void RendererSceneSkyRD::Sky::free(RendererStorageRD *p_storage) { +void RendererSceneSkyRD::Sky::free() { if (radiance.is_valid()) { RD::get_singleton()->free(radiance); radiance = RID(); @@ -614,12 +615,12 @@ void RendererSceneSkyRD::Sky::free(RendererStorageRD *p_storage) { } if (material.is_valid()) { - p_storage->free(material); + RSG::material_storage->material_free(material); material = RID(); } } -RID RendererSceneSkyRD::Sky::get_textures(RendererStorageRD *p_storage, SkyTextureSetVersion p_version, RID p_default_shader_rd) { +RID RendererSceneSkyRD::Sky::get_textures(SkyTextureSetVersion p_version, RID p_default_shader_rd) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); if (texture_uniform_sets[p_version].is_valid() && RD::get_singleton()->uniform_set_is_valid(texture_uniform_sets[p_version])) { @@ -795,10 +796,9 @@ RendererSceneSkyRD::RendererSceneSkyRD() { sky_use_cubemap_array = GLOBAL_GET("rendering/reflections/sky_reflections/texture_array_reflections"); } -void RendererSceneSkyRD::init(RendererStorageRD *p_storage) { +void RendererSceneSkyRD::init() { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - storage = p_storage; { // Start with the directional lights for the sky @@ -1387,7 +1387,7 @@ void RendererSceneSkyRD::update(RendererSceneEnvironmentRD *p_env, const CameraM for (int i = 0; i < 6; i++) { Basis local_view = Basis::looking_at(view_normals[i], view_up[i]); - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_CUBEMAP_QUARTER_RES, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_CUBEMAP_QUARTER_RES, sky_shader.default_shader_rd); cubemap_draw_list = RD::get_singleton()->draw_list_begin(sky->reflection.layers[0].mipmaps[2].framebuffers[i], RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD); _render_sky(cubemap_draw_list, p_time, sky->reflection.layers[0].mipmaps[2].framebuffers[i], pipeline, material->uniform_set, texture_uniform_set, 1, &cm, local_view, multiplier, p_transform.origin, p_luminance_multiplier); @@ -1406,7 +1406,7 @@ void RendererSceneSkyRD::update(RendererSceneEnvironmentRD *p_env, const CameraM for (int i = 0; i < 6; i++) { Basis local_view = Basis::looking_at(view_normals[i], view_up[i]); - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_CUBEMAP_HALF_RES, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_CUBEMAP_HALF_RES, sky_shader.default_shader_rd); cubemap_draw_list = RD::get_singleton()->draw_list_begin(sky->reflection.layers[0].mipmaps[1].framebuffers[i], RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD); _render_sky(cubemap_draw_list, p_time, sky->reflection.layers[0].mipmaps[1].framebuffers[i], pipeline, material->uniform_set, texture_uniform_set, 1, &cm, local_view, multiplier, p_transform.origin, p_luminance_multiplier); @@ -1421,7 +1421,7 @@ void RendererSceneSkyRD::update(RendererSceneEnvironmentRD *p_env, const CameraM RD::get_singleton()->draw_command_begin_label("Render Sky Cubemap"); for (int i = 0; i < 6; i++) { Basis local_view = Basis::looking_at(view_normals[i], view_up[i]); - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_CUBEMAP, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_CUBEMAP, sky_shader.default_shader_rd); cubemap_draw_list = RD::get_singleton()->draw_list_begin(sky->reflection.layers[0].mipmaps[0].framebuffers[i], RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD); _render_sky(cubemap_draw_list, p_time, sky->reflection.layers[0].mipmaps[0].framebuffers[i], pipeline, material->uniform_set, texture_uniform_set, 1, &cm, local_view, multiplier, p_transform.origin, p_luminance_multiplier); @@ -1430,22 +1430,22 @@ void RendererSceneSkyRD::update(RendererSceneEnvironmentRD *p_env, const CameraM RD::get_singleton()->draw_command_end_label(); if (sky_mode == RS::SKY_MODE_REALTIME) { - sky->reflection.create_reflection_fast_filter(storage, sky_use_cubemap_array); + sky->reflection.create_reflection_fast_filter(sky_use_cubemap_array); if (sky_use_cubemap_array) { - sky->reflection.update_reflection_mipmaps(storage, 0, sky->reflection.layers.size()); + sky->reflection.update_reflection_mipmaps(0, sky->reflection.layers.size()); } } else { if (update_single_frame) { for (int i = 1; i < max_processing_layer; i++) { - sky->reflection.create_reflection_importance_sample(storage, sky_use_cubemap_array, 10, i, sky_ggx_samples_quality); + sky->reflection.create_reflection_importance_sample(sky_use_cubemap_array, 10, i, sky_ggx_samples_quality); } if (sky_use_cubemap_array) { - sky->reflection.update_reflection_mipmaps(storage, 0, sky->reflection.layers.size()); + sky->reflection.update_reflection_mipmaps(0, sky->reflection.layers.size()); } } else { if (sky_use_cubemap_array) { // Multi-Frame so just update the first array level - sky->reflection.update_reflection_mipmaps(storage, 0, 1); + sky->reflection.update_reflection_mipmaps(0, 1); } } sky->processing_layer = 1; @@ -1455,10 +1455,10 @@ void RendererSceneSkyRD::update(RendererSceneEnvironmentRD *p_env, const CameraM } else { if (sky_mode == RS::SKY_MODE_INCREMENTAL && sky->processing_layer < max_processing_layer) { - sky->reflection.create_reflection_importance_sample(storage, sky_use_cubemap_array, 10, sky->processing_layer, sky_ggx_samples_quality); + sky->reflection.create_reflection_importance_sample(sky_use_cubemap_array, 10, sky->processing_layer, sky_ggx_samples_quality); if (sky_use_cubemap_array) { - sky->reflection.update_reflection_mipmaps(storage, sky->processing_layer, sky->processing_layer + 1); + sky->reflection.update_reflection_mipmaps(sky->processing_layer, sky->processing_layer + 1); } sky->processing_layer++; @@ -1536,7 +1536,7 @@ void RendererSceneSkyRD::draw(RendererSceneEnvironmentRD *p_env, bool p_can_cont if (shader_data->uses_quarter_res) { PipelineCacheRD *pipeline = &shader_data->pipelines[view_count > 1 ? SKY_VERSION_QUARTER_RES_MULTIVIEW : SKY_VERSION_QUARTER_RES]; - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_QUARTER_RES, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_QUARTER_RES, sky_shader.default_shader_rd); Vector<Color> clear_colors; clear_colors.push_back(Color(0.0, 0.0, 0.0)); @@ -1549,7 +1549,7 @@ void RendererSceneSkyRD::draw(RendererSceneEnvironmentRD *p_env, bool p_can_cont if (shader_data->uses_half_res) { PipelineCacheRD *pipeline = &shader_data->pipelines[view_count > 1 ? SKY_VERSION_HALF_RES_MULTIVIEW : SKY_VERSION_HALF_RES]; - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_HALF_RES, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_HALF_RES, sky_shader.default_shader_rd); Vector<Color> clear_colors; clear_colors.push_back(Color(0.0, 0.0, 0.0)); @@ -1563,7 +1563,7 @@ void RendererSceneSkyRD::draw(RendererSceneEnvironmentRD *p_env, bool p_can_cont RID texture_uniform_set; if (sky) { - texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_BACKGROUND, sky_shader.default_shader_rd); + texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_BACKGROUND, sky_shader.default_shader_rd); } else { texture_uniform_set = sky_scene_state.fog_only_texture_uniform_set; } @@ -1634,7 +1634,7 @@ void RendererSceneSkyRD::update_res_buffers(RendererSceneEnvironmentRD *p_env, u if (shader_data->uses_quarter_res) { PipelineCacheRD *pipeline = &shader_data->pipelines[view_count > 1 ? SKY_VERSION_QUARTER_RES_MULTIVIEW : SKY_VERSION_QUARTER_RES]; - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_QUARTER_RES, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_QUARTER_RES, sky_shader.default_shader_rd); Vector<Color> clear_colors; clear_colors.push_back(Color(0.0, 0.0, 0.0)); @@ -1647,7 +1647,7 @@ void RendererSceneSkyRD::update_res_buffers(RendererSceneEnvironmentRD *p_env, u if (shader_data->uses_half_res) { PipelineCacheRD *pipeline = &shader_data->pipelines[view_count > 1 ? SKY_VERSION_HALF_RES_MULTIVIEW : SKY_VERSION_HALF_RES]; - RID texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_HALF_RES, sky_shader.default_shader_rd); + RID texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_HALF_RES, sky_shader.default_shader_rd); Vector<Color> clear_colors; clear_colors.push_back(Color(0.0, 0.0, 0.0)); @@ -1729,7 +1729,7 @@ void RendererSceneSkyRD::draw(RD::DrawListID p_draw_list, RendererSceneEnvironme RID texture_uniform_set; if (sky) { - texture_uniform_set = sky->get_textures(storage, SKY_TEXTURE_SET_BACKGROUND, sky_shader.default_shader_rd); + texture_uniform_set = sky->get_textures(SKY_TEXTURE_SET_BACKGROUND, sky_shader.default_shader_rd); } else { texture_uniform_set = sky_scene_state.fog_only_texture_uniform_set; } @@ -1777,7 +1777,7 @@ void RendererSceneSkyRD::update_dirty_skys() { sky->radiance = RD::get_singleton()->texture_create(tf, RD::TextureView()); - sky->reflection.update_reflection_data(storage, sky->radiance_size, mipmaps, true, sky->radiance, 0, sky->mode == RS::SKY_MODE_REALTIME, roughness_layers, texture_format); + sky->reflection.update_reflection_data(sky->radiance_size, mipmaps, true, sky->radiance, 0, sky->mode == RS::SKY_MODE_REALTIME, roughness_layers, texture_format); } else { //regular cubemap, lower quality (aliasing, less memory) @@ -1792,7 +1792,7 @@ void RendererSceneSkyRD::update_dirty_skys() { sky->radiance = RD::get_singleton()->texture_create(tf, RD::TextureView()); - sky->reflection.update_reflection_data(storage, sky->radiance_size, MIN(mipmaps, layers), false, sky->radiance, 0, sky->mode == RS::SKY_MODE_REALTIME, roughness_layers, texture_format); + sky->reflection.update_reflection_data(sky->radiance_size, MIN(mipmaps, layers), false, sky->radiance, 0, sky->mode == RS::SKY_MODE_REALTIME, roughness_layers, texture_format); } texture_set_dirty = true; } @@ -1872,7 +1872,7 @@ void RendererSceneSkyRD::free_sky(RID p_sky) { Sky *sky = get_sky(p_sky); ERR_FAIL_COND(!sky); - sky->free(storage); + sky->free(); sky_owner.free(p_sky); } diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.h b/servers/rendering/renderer_rd/renderer_scene_sky_rd.h index 83a8fe6e77..a8ee406abc 100644 --- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.h +++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.h @@ -33,11 +33,13 @@ #include "core/templates/rid_owner.h" #include "servers/rendering/renderer_compositor.h" +#include "servers/rendering/renderer_rd/pipeline_cache_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/sky.glsl.gen.h" +#include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_scene_render.h" #include "servers/rendering/rendering_device.h" +#include "servers/rendering/shader_compiler.h" // Forward declare RendererSceneRenderRD so we can pass it into some of our methods, these classes are pretty tightly bound class RendererSceneRenderRD; @@ -63,7 +65,6 @@ public: }; private: - RendererStorageRD *storage = nullptr; RD::DataFormat texture_format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT; RID index_buffer; @@ -211,10 +212,10 @@ public: Vector<Layer> layers; void clear_reflection_data(); - void update_reflection_data(RendererStorageRD *p_storage, int p_size, int p_mipmaps, bool p_use_array, RID p_base_cube, int p_base_layer, bool p_low_quality, int p_roughness_layers, RD::DataFormat p_texture_format); - void create_reflection_fast_filter(RendererStorageRD *p_storage, bool p_use_arrays); - void create_reflection_importance_sample(RendererStorageRD *p_storage, bool p_use_arrays, int p_cube_side, int p_base_layer, uint32_t p_sky_ggx_samples_quality); - void update_reflection_mipmaps(RendererStorageRD *p_storage, int p_start, int p_end); + void update_reflection_data(int p_size, int p_mipmaps, bool p_use_array, RID p_base_cube, int p_base_layer, bool p_low_quality, int p_roughness_layers, RD::DataFormat p_texture_format); + void create_reflection_fast_filter(bool p_use_arrays); + void create_reflection_importance_sample(bool p_use_arrays, int p_cube_side, int p_base_layer, uint32_t p_sky_ggx_samples_quality); + void update_reflection_mipmaps(int p_start, int p_end); }; /* Sky shader */ @@ -267,9 +268,9 @@ public: Vector3 prev_position; float prev_time; - void free(RendererStorageRD *p_storage); + void free(); - RID get_textures(RendererStorageRD *p_storage, SkyTextureSetVersion p_version, RID p_default_shader_rd); + RID get_textures(SkyTextureSetVersion p_version, RID p_default_shader_rd); bool set_radiance_size(int p_radiance_size); bool set_mode(RS::SkyMode p_mode); bool set_material(RID p_material); @@ -289,7 +290,7 @@ public: static RendererRD::MaterialData *_create_sky_material_funcs(RendererRD::ShaderData *p_shader); RendererSceneSkyRD(); - void init(RendererStorageRD *p_storage); + void init(); void set_texture_format(RD::DataFormat p_texture_format); ~RendererSceneSkyRD(); diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.h b/servers/rendering/renderer_rd/renderer_storage_rd.h deleted file mode 100644 index d41129d678..0000000000 --- a/servers/rendering/renderer_rd/renderer_storage_rd.h +++ /dev/null @@ -1,222 +0,0 @@ -/*************************************************************************/ -/* renderer_storage_rd.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef RENDERING_SERVER_STORAGE_RD_H -#define RENDERING_SERVER_STORAGE_RD_H - -#include "core/templates/list.h" -#include "core/templates/local_vector.h" -#include "core/templates/rid_owner.h" -#include "servers/rendering/renderer_compositor.h" -#include "servers/rendering/renderer_rd/effects_rd.h" -#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl.gen.h" -#include "servers/rendering/renderer_rd/storage_rd/material_storage.h" -#include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering/rendering_device.h" -#include "servers/rendering/shader_compiler.h" - -class RendererStorageRD : public RendererStorage { -public: - static _FORCE_INLINE_ void store_transform(const Transform3D &p_mtx, float *p_array) { - p_array[0] = p_mtx.basis.rows[0][0]; - p_array[1] = p_mtx.basis.rows[1][0]; - p_array[2] = p_mtx.basis.rows[2][0]; - p_array[3] = 0; - p_array[4] = p_mtx.basis.rows[0][1]; - p_array[5] = p_mtx.basis.rows[1][1]; - p_array[6] = p_mtx.basis.rows[2][1]; - p_array[7] = 0; - p_array[8] = p_mtx.basis.rows[0][2]; - p_array[9] = p_mtx.basis.rows[1][2]; - p_array[10] = p_mtx.basis.rows[2][2]; - p_array[11] = 0; - p_array[12] = p_mtx.origin.x; - p_array[13] = p_mtx.origin.y; - p_array[14] = p_mtx.origin.z; - p_array[15] = 1; - } - - static _FORCE_INLINE_ void store_basis_3x4(const Basis &p_mtx, float *p_array) { - p_array[0] = p_mtx.rows[0][0]; - p_array[1] = p_mtx.rows[1][0]; - p_array[2] = p_mtx.rows[2][0]; - p_array[3] = 0; - p_array[4] = p_mtx.rows[0][1]; - p_array[5] = p_mtx.rows[1][1]; - p_array[6] = p_mtx.rows[2][1]; - p_array[7] = 0; - p_array[8] = p_mtx.rows[0][2]; - p_array[9] = p_mtx.rows[1][2]; - p_array[10] = p_mtx.rows[2][2]; - p_array[11] = 0; - } - - static _FORCE_INLINE_ void store_transform_3x3(const Basis &p_mtx, float *p_array) { - p_array[0] = p_mtx.rows[0][0]; - p_array[1] = p_mtx.rows[1][0]; - p_array[2] = p_mtx.rows[2][0]; - p_array[3] = 0; - p_array[4] = p_mtx.rows[0][1]; - p_array[5] = p_mtx.rows[1][1]; - p_array[6] = p_mtx.rows[2][1]; - p_array[7] = 0; - p_array[8] = p_mtx.rows[0][2]; - p_array[9] = p_mtx.rows[1][2]; - p_array[10] = p_mtx.rows[2][2]; - p_array[11] = 0; - } - - static _FORCE_INLINE_ void store_transform_transposed_3x4(const Transform3D &p_mtx, float *p_array) { - p_array[0] = p_mtx.basis.rows[0][0]; - p_array[1] = p_mtx.basis.rows[0][1]; - p_array[2] = p_mtx.basis.rows[0][2]; - p_array[3] = p_mtx.origin.x; - p_array[4] = p_mtx.basis.rows[1][0]; - p_array[5] = p_mtx.basis.rows[1][1]; - p_array[6] = p_mtx.basis.rows[1][2]; - p_array[7] = p_mtx.origin.y; - p_array[8] = p_mtx.basis.rows[2][0]; - p_array[9] = p_mtx.basis.rows[2][1]; - p_array[10] = p_mtx.basis.rows[2][2]; - p_array[11] = p_mtx.origin.z; - } - - static _FORCE_INLINE_ void store_camera(const CameraMatrix &p_mtx, float *p_array) { - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - p_array[i * 4 + j] = p_mtx.matrix[i][j]; - } - } - } - - static _FORCE_INLINE_ void store_soft_shadow_kernel(const float *p_kernel, float *p_array) { - for (int i = 0; i < 128; i++) { - p_array[i] = p_kernel[i]; - } - } - -private: - /* FOG VOLUMES */ - - struct FogVolume { - RID material; - Vector3 extents = Vector3(1, 1, 1); - - RS::FogVolumeShape shape = RS::FOG_VOLUME_SHAPE_BOX; - - Dependency dependency; - }; - - mutable RID_Owner<FogVolume, true> fog_volume_owner; - - /* visibility_notifier */ - - struct VisibilityNotifier { - AABB aabb; - Callable enter_callback; - Callable exit_callback; - Dependency dependency; - }; - - mutable RID_Owner<VisibilityNotifier> visibility_notifier_owner; - - /* EFFECTS */ - - EffectsRD *effects = nullptr; - -public: - //internal usage - - void base_update_dependency(RID p_base, DependencyTracker *p_instance); - - /* FOG VOLUMES */ - - virtual RID fog_volume_allocate(); - virtual void fog_volume_initialize(RID p_rid); - - virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape); - virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents); - virtual void fog_volume_set_material(RID p_fog_volume, RID p_material); - virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const; - virtual RID fog_volume_get_material(RID p_fog_volume) const; - virtual AABB fog_volume_get_aabb(RID p_fog_volume) const; - virtual Vector3 fog_volume_get_extents(RID p_fog_volume) const; - - /* VISIBILITY NOTIFIER */ - - virtual RID visibility_notifier_allocate(); - virtual void visibility_notifier_initialize(RID p_notifier); - virtual void visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb); - virtual void visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable); - - virtual AABB visibility_notifier_get_aabb(RID p_notifier) const; - virtual void visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred); - - RS::InstanceType get_base_type(RID p_rid) const; - - bool free(RID p_rid); - - bool has_os_feature(const String &p_feature) const; - - void update_dirty_resources(); - - void set_debug_generate_wireframes(bool p_generate) {} - - //keep cached since it can be called form any thread - uint64_t texture_mem_cache = 0; - uint64_t buffer_mem_cache = 0; - uint64_t total_mem_cache = 0; - - virtual void update_memory_info(); - virtual uint64_t get_rendering_info(RS::RenderingInfo p_info); - - String get_video_adapter_name() const; - String get_video_adapter_vendor() const; - RenderingDevice::DeviceType get_video_adapter_type() const; - String get_video_adapter_api_version() const; - - virtual void capture_timestamps_begin(); - virtual void capture_timestamp(const String &p_name); - virtual uint32_t get_captured_timestamps_count() const; - virtual uint64_t get_captured_timestamps_frame() const; - virtual uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const; - virtual uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const; - virtual String get_captured_timestamp_name(uint32_t p_index) const; - - static RendererStorageRD *base_singleton; - - void init_effects(bool p_prefer_raster_effects); - EffectsRD *get_effects(); - - RendererStorageRD(); - ~RendererStorageRD(); -}; - -#endif // RASTERIZER_STORAGE_RD_H diff --git a/servers/rendering/renderer_rd/storage_rd/light_storage.cpp b/servers/rendering/renderer_rd/storage_rd/light_storage.cpp index 56a4525b8e..e65f676785 100644 --- a/servers/rendering/renderer_rd/storage_rd/light_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/light_storage.cpp @@ -156,12 +156,12 @@ void LightStorage::light_set_param(RID p_light, RS::LightParam p_param, float p_ case RS::LIGHT_PARAM_SHADOW_PANCAKE_SIZE: case RS::LIGHT_PARAM_SHADOW_BIAS: { light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } break; case RS::LIGHT_PARAM_SIZE: { if ((light->param[p_param] > CMP_EPSILON) != (p_value > CMP_EPSILON)) { //changing from no size to size and the opposite - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); } } break; default: { @@ -177,7 +177,7 @@ void LightStorage::light_set_shadow(RID p_light, bool p_enabled) { light->shadow = p_enabled; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_projector(RID p_light, RID p_texture) { @@ -199,7 +199,7 @@ void LightStorage::light_set_projector(RID p_light, RID p_texture) { if (light->projector.is_valid()) { texture_storage->texture_add_to_decal_atlas(light->projector, light->type == RS::LIGHT_OMNI); } - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR); } } @@ -217,7 +217,7 @@ void LightStorage::light_set_cull_mask(RID p_light, uint32_t p_mask) { light->cull_mask = p_mask; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_distance_fade(RID p_light, bool p_enabled, float p_begin, float p_shadow, float p_length) { @@ -237,7 +237,7 @@ void LightStorage::light_set_reverse_cull_face_mode(RID p_light, bool p_enabled) light->reverse_cull = p_enabled; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_bake_mode(RID p_light, RS::LightBakeMode p_bake_mode) { @@ -247,7 +247,7 @@ void LightStorage::light_set_bake_mode(RID p_light, RS::LightBakeMode p_bake_mod light->bake_mode = p_bake_mode; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_set_max_sdfgi_cascade(RID p_light, uint32_t p_cascade) { @@ -257,7 +257,7 @@ void LightStorage::light_set_max_sdfgi_cascade(RID p_light, uint32_t p_cascade) light->max_sdfgi_cascade = p_cascade; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_omni_set_shadow_mode(RID p_light, RS::LightOmniShadowMode p_mode) { @@ -267,7 +267,7 @@ void LightStorage::light_omni_set_shadow_mode(RID p_light, RS::LightOmniShadowMo light->omni_shadow_mode = p_mode; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } RS::LightOmniShadowMode LightStorage::light_omni_get_shadow_mode(RID p_light) { @@ -283,7 +283,7 @@ void LightStorage::light_directional_set_shadow_mode(RID p_light, RS::LightDirec light->directional_shadow_mode = p_mode; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } void LightStorage::light_directional_set_blend_splits(RID p_light, bool p_enable) { @@ -292,7 +292,7 @@ void LightStorage::light_directional_set_blend_splits(RID p_light, bool p_enable light->directional_blend_splits = p_enable; light->version++; - light->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_LIGHT); + light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT); } bool LightStorage::light_directional_get_blend_splits(RID p_light) const { @@ -387,7 +387,7 @@ void LightStorage::reflection_probe_set_update_mode(RID p_probe, RS::ReflectionP ERR_FAIL_COND(!reflection_probe); reflection_probe->update_mode = p_mode; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_intensity(RID p_probe, float p_intensity) { @@ -424,7 +424,7 @@ void LightStorage::reflection_probe_set_max_distance(RID p_probe, float p_distan reflection_probe->max_distance = p_distance; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_extents(RID p_probe, const Vector3 &p_extents) { @@ -435,7 +435,7 @@ void LightStorage::reflection_probe_set_extents(RID p_probe, const Vector3 &p_ex return; } reflection_probe->extents = p_extents; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_origin_offset(RID p_probe, const Vector3 &p_offset) { @@ -443,7 +443,7 @@ void LightStorage::reflection_probe_set_origin_offset(RID p_probe, const Vector3 ERR_FAIL_COND(!reflection_probe); reflection_probe->origin_offset = p_offset; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_as_interior(RID p_probe, bool p_enable) { @@ -451,7 +451,7 @@ void LightStorage::reflection_probe_set_as_interior(RID p_probe, bool p_enable) ERR_FAIL_COND(!reflection_probe); reflection_probe->interior = p_enable; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_enable_box_projection(RID p_probe, bool p_enable) { @@ -466,7 +466,7 @@ void LightStorage::reflection_probe_set_enable_shadows(RID p_probe, bool p_enabl ERR_FAIL_COND(!reflection_probe); reflection_probe->enable_shadows = p_enable; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers) { @@ -474,7 +474,7 @@ void LightStorage::reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers ERR_FAIL_COND(!reflection_probe); reflection_probe->cull_mask = p_layers; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } void LightStorage::reflection_probe_set_resolution(RID p_probe, int p_resolution) { @@ -491,7 +491,7 @@ void LightStorage::reflection_probe_set_mesh_lod_threshold(RID p_probe, float p_ reflection_probe->mesh_lod_threshold = p_ratio; - reflection_probe->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE); + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } AABB LightStorage::reflection_probe_get_aabb(RID p_probe) const { diff --git a/servers/rendering/renderer_rd/storage_rd/light_storage.h b/servers/rendering/renderer_rd/storage_rd/light_storage.h index 3cc455692d..fb25e4da7e 100644 --- a/servers/rendering/renderer_rd/storage_rd/light_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/light_storage.h @@ -35,6 +35,7 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "servers/rendering/storage/light_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererRD { @@ -61,7 +62,7 @@ struct Light { RS::LightDirectionalSkyMode directional_sky_mode = RS::LIGHT_DIRECTIONAL_SKY_MODE_LIGHT_AND_SKY; uint64_t version = 0; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* REFLECTION PROBE */ @@ -82,7 +83,7 @@ struct ReflectionProbe { uint32_t cull_mask = (1 << 20) - 1; float mesh_lod_threshold = 0.01; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* LIGHTMAP */ @@ -104,7 +105,7 @@ struct Lightmap { int32_t over = EMPTY_LEAF, under = EMPTY_LEAF; }; - RendererStorage::Dependency dependency; + Dependency dependency; }; class LightStorage : public RendererLightStorage { diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp index 096d371b8d..fcd25852eb 100644 --- a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp @@ -2346,7 +2346,7 @@ void MaterialStorage::shader_set_code(RID p_shader, const String &p_code) { for (Material *E : shader->owners) { Material *material = E; - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); _material_queue_update(material, true, true); } } @@ -2436,7 +2436,7 @@ void MaterialStorage::_material_uniform_set_erased(void *p_material) { // if a texture is deleted, so re-create it. MaterialStorage::get_singleton()->_material_queue_update(material, false, true); } - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); } } @@ -2466,7 +2466,7 @@ void MaterialStorage::_update_queued_materials() { if (uniforms_changed) { //some implementations such as 3D renderer cache the matreial uniform set, so update is required - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); } } } @@ -2507,7 +2507,7 @@ void MaterialStorage::material_set_shader(RID p_material, RID p_shader) { } if (p_shader.is_null()) { - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); material->shader_id = 0; return; } @@ -2530,7 +2530,7 @@ void MaterialStorage::material_set_shader(RID p_material, RID p_shader) { material->data->set_next_pass(material->next_pass); material->data->set_render_priority(material->priority); //updating happens later - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); _material_queue_update(material, true, true); } @@ -2576,7 +2576,7 @@ void MaterialStorage::material_set_next_pass(RID p_material, RID p_next_material material->data->set_next_pass(p_next_material); } - material->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + material->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); } void MaterialStorage::material_set_render_priority(RID p_material, int priority) { @@ -2626,7 +2626,7 @@ void MaterialStorage::material_get_instance_shader_parameters(RID p_material, Li } } -void MaterialStorage::material_update_dependency(RID p_material, RendererStorage::DependencyTracker *p_instance) { +void MaterialStorage::material_update_dependency(RID p_material, DependencyTracker *p_instance) { Material *material = material_owner.get_or_null(p_material); ERR_FAIL_COND(!material); p_instance->update_dependency(&material->dependency); diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.h b/servers/rendering/renderer_rd/storage_rd/material_storage.h index f83df05355..e35d5e7669 100644 --- a/servers/rendering/renderer_rd/storage_rd/material_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/material_storage.h @@ -31,12 +31,14 @@ #ifndef MATERIAL_STORAGE_RD_H #define MATERIAL_STORAGE_RD_H +#include "core/math/camera_matrix.h" #include "core/templates/local_vector.h" #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "servers/rendering/shader_compiler.h" #include "servers/rendering/shader_language.h" #include "servers/rendering/storage/material_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererRD { @@ -125,7 +127,7 @@ struct Material { RID next_pass; SelfList<Material> update_element; - RendererStorage::Dependency dependency; + Dependency dependency; Material() : update_element(this) {} @@ -232,6 +234,86 @@ public: MaterialStorage(); virtual ~MaterialStorage(); + /* Helpers */ + + static _FORCE_INLINE_ void store_transform(const Transform3D &p_mtx, float *p_array) { + p_array[0] = p_mtx.basis.rows[0][0]; + p_array[1] = p_mtx.basis.rows[1][0]; + p_array[2] = p_mtx.basis.rows[2][0]; + p_array[3] = 0; + p_array[4] = p_mtx.basis.rows[0][1]; + p_array[5] = p_mtx.basis.rows[1][1]; + p_array[6] = p_mtx.basis.rows[2][1]; + p_array[7] = 0; + p_array[8] = p_mtx.basis.rows[0][2]; + p_array[9] = p_mtx.basis.rows[1][2]; + p_array[10] = p_mtx.basis.rows[2][2]; + p_array[11] = 0; + p_array[12] = p_mtx.origin.x; + p_array[13] = p_mtx.origin.y; + p_array[14] = p_mtx.origin.z; + p_array[15] = 1; + } + + static _FORCE_INLINE_ void store_basis_3x4(const Basis &p_mtx, float *p_array) { + p_array[0] = p_mtx.rows[0][0]; + p_array[1] = p_mtx.rows[1][0]; + p_array[2] = p_mtx.rows[2][0]; + p_array[3] = 0; + p_array[4] = p_mtx.rows[0][1]; + p_array[5] = p_mtx.rows[1][1]; + p_array[6] = p_mtx.rows[2][1]; + p_array[7] = 0; + p_array[8] = p_mtx.rows[0][2]; + p_array[9] = p_mtx.rows[1][2]; + p_array[10] = p_mtx.rows[2][2]; + p_array[11] = 0; + } + + static _FORCE_INLINE_ void store_transform_3x3(const Basis &p_mtx, float *p_array) { + p_array[0] = p_mtx.rows[0][0]; + p_array[1] = p_mtx.rows[1][0]; + p_array[2] = p_mtx.rows[2][0]; + p_array[3] = 0; + p_array[4] = p_mtx.rows[0][1]; + p_array[5] = p_mtx.rows[1][1]; + p_array[6] = p_mtx.rows[2][1]; + p_array[7] = 0; + p_array[8] = p_mtx.rows[0][2]; + p_array[9] = p_mtx.rows[1][2]; + p_array[10] = p_mtx.rows[2][2]; + p_array[11] = 0; + } + + static _FORCE_INLINE_ void store_transform_transposed_3x4(const Transform3D &p_mtx, float *p_array) { + p_array[0] = p_mtx.basis.rows[0][0]; + p_array[1] = p_mtx.basis.rows[0][1]; + p_array[2] = p_mtx.basis.rows[0][2]; + p_array[3] = p_mtx.origin.x; + p_array[4] = p_mtx.basis.rows[1][0]; + p_array[5] = p_mtx.basis.rows[1][1]; + p_array[6] = p_mtx.basis.rows[1][2]; + p_array[7] = p_mtx.origin.y; + p_array[8] = p_mtx.basis.rows[2][0]; + p_array[9] = p_mtx.basis.rows[2][1]; + p_array[10] = p_mtx.basis.rows[2][2]; + p_array[11] = p_mtx.origin.z; + } + + static _FORCE_INLINE_ void store_camera(const CameraMatrix &p_mtx, float *p_array) { + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + p_array[i * 4 + j] = p_mtx.matrix[i][j]; + } + } + } + + static _FORCE_INLINE_ void store_soft_shadow_kernel(const float *p_kernel, float *p_array) { + for (int i = 0; i < 128; i++) { + p_array[i] = p_kernel[i]; + } + } + /* Samplers */ _FORCE_INLINE_ RID sampler_rd_get_default(RS::CanvasItemTextureFilter p_filter, RS::CanvasItemTextureRepeat p_repeat) { @@ -317,7 +399,7 @@ public: virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override; - virtual void material_update_dependency(RID p_material, RendererStorage::DependencyTracker *p_instance) override; + virtual void material_update_dependency(RID p_material, DependencyTracker *p_instance) override; void material_set_data_request_function(ShaderType p_shader_type, MaterialDataRequestFunction p_function); MaterialDataRequestFunction material_get_data_request_function(ShaderType p_shader_type); diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp index 1e0d67f269..c97b75ba14 100644 --- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp @@ -218,7 +218,7 @@ void MeshStorage::mesh_free(RID p_rid) { for (Mesh *E : mesh->shadow_owners) { Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); - shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + shadow_owner->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } } mesh_owner.free(p_rid); @@ -429,12 +429,12 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) _mesh_instance_add_surface(mi, mesh, mesh->surface_count - 1); } - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); for (Mesh *E : mesh->shadow_owners) { Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); - shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + shadow_owner->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } mesh->material_cache.clear(); @@ -501,7 +501,7 @@ void MeshStorage::mesh_surface_set_material(RID p_mesh, int p_surface, RID p_mat ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_surface, mesh->surface_count); mesh->surfaces[p_surface]->material = p_material; - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MATERIAL); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MATERIAL); mesh->material_cache.clear(); } @@ -692,7 +692,7 @@ void MeshStorage::mesh_set_shadow_mesh(RID p_mesh, RID p_shadow_mesh) { shadow_mesh->shadow_owners.insert(mesh); } - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } void MeshStorage::mesh_clear(RID p_mesh) { @@ -740,12 +740,12 @@ void MeshStorage::mesh_clear(RID p_mesh) { _mesh_instance_clear(mi); } mesh->has_bone_weights = false; - mesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + mesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); for (Mesh *E : mesh->shadow_owners) { Mesh *shadow_owner = E; shadow_owner->shadow_mesh = RID(); - shadow_owner->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + shadow_owner->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } } @@ -1209,7 +1209,7 @@ void MeshStorage::multimesh_allocate_data(RID p_multimesh, int p_instances, RS:: multimesh->buffer = RD::get_singleton()->storage_buffer_create(multimesh->instances * multimesh->stride_cache * 4); } - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MULTIMESH); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MULTIMESH); } int MeshStorage::multimesh_get_instance_count(RID p_multimesh) const { @@ -1243,7 +1243,7 @@ void MeshStorage::multimesh_set_mesh(RID p_multimesh, RID p_mesh) { } } - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MESH); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MESH); } #define MULTIMESH_DIRTY_REGION_SIZE 512 @@ -1602,7 +1602,7 @@ void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_b const float *data = p_buffer.ptr(); _multimesh_re_create_aabb(multimesh, data, multimesh->instances); - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } } @@ -1644,7 +1644,7 @@ void MeshStorage::multimesh_set_visible_instances(RID p_multimesh, int p_visible multimesh->visible_instances = p_visible; - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES); } int MeshStorage::multimesh_get_visible_instances(RID p_multimesh) const { @@ -1703,7 +1703,7 @@ void MeshStorage::_update_dirty_multimeshes() { //aabb is dirty.. _multimesh_re_create_aabb(multimesh, data, visible_instances); multimesh->aabb_dirty = false; - multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } } @@ -1781,7 +1781,7 @@ void MeshStorage::skeleton_allocate_data(RID p_skeleton, int p_bones, bool p_2d_ } } - skeleton->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_SKELETON_DATA); + skeleton->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_SKELETON_DATA); } int MeshStorage::skeleton_get_bone_count(RID p_skeleton) const { @@ -1902,7 +1902,7 @@ void MeshStorage::_update_dirty_skeletons() { skeleton_dirty_list = skeleton->dirty_list; - skeleton->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_SKELETON_BONES); + skeleton->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_SKELETON_BONES); skeleton->version++; @@ -1913,7 +1913,7 @@ void MeshStorage::_update_dirty_skeletons() { skeleton_dirty_list = nullptr; } -void MeshStorage::skeleton_update_dependency(RID p_skeleton, RendererStorage::DependencyTracker *p_instance) { +void MeshStorage::skeleton_update_dependency(RID p_skeleton, DependencyTracker *p_instance) { Skeleton *skeleton = skeleton_owner.get_or_null(p_skeleton); ERR_FAIL_COND(!skeleton); diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.h b/servers/rendering/renderer_rd/storage_rd/mesh_storage.h index 7ce019cf98..9cdda6bfca 100644 --- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.h @@ -35,8 +35,8 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "servers/rendering/renderer_rd/shaders/skeleton.glsl.gen.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/storage/mesh_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererRD { @@ -143,7 +143,7 @@ struct Mesh { RID shadow_mesh; HashSet<Mesh *> shadow_owners; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* Mesh Instance */ @@ -199,7 +199,7 @@ struct MultiMesh { bool dirty = false; MultiMesh *dirty_list = nullptr; - RendererStorage::Dependency dependency; + Dependency dependency; }; /* Skeleton */ @@ -256,7 +256,7 @@ struct Skeleton { uint64_t version = 1; - RendererStorage::Dependency dependency; + Dependency dependency; }; class MeshStorage : public RendererMeshStorage { @@ -672,7 +672,7 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform) override; virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const override; - virtual void skeleton_update_dependency(RID p_skeleton, RendererStorage::DependencyTracker *p_instance) override; + virtual void skeleton_update_dependency(RID p_skeleton, DependencyTracker *p_instance) override; void _update_dirty_skeletons(); diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp index 58a96ed1f9..5200e0d318 100644 --- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp @@ -30,7 +30,6 @@ #include "particles_storage.h" #include "servers/rendering/renderer_rd/renderer_compositor_rd.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/rendering_server_globals.h" #include "texture_storage.h" @@ -321,7 +320,7 @@ void ParticlesStorage::particles_set_amount(RID p_particles, int p_amount) { particles->prev_phase = 0; particles->clear = true; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_PARTICLES); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_PARTICLES); } void ParticlesStorage::particles_set_lifetime(RID p_particles, double p_lifetime) { @@ -356,7 +355,7 @@ void ParticlesStorage::particles_set_custom_aabb(RID p_particles, const AABB &p_ Particles *particles = particles_owner.get_or_null(p_particles); ERR_FAIL_COND(!particles); particles->custom_aabb = p_aabb; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void ParticlesStorage::particles_set_speed_scale(RID p_particles, double p_scale) { @@ -370,7 +369,7 @@ void ParticlesStorage::particles_set_use_local_coordinates(RID p_particles, bool ERR_FAIL_COND(!particles); particles->use_local_coords = p_enable; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_PARTICLES); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_PARTICLES); } void ParticlesStorage::particles_set_fixed_fps(RID p_particles, int p_fps) { @@ -386,7 +385,7 @@ void ParticlesStorage::particles_set_fixed_fps(RID p_particles, int p_fps) { particles->prev_phase = 0; particles->clear = true; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_PARTICLES); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_PARTICLES); } void ParticlesStorage::particles_set_interpolate(RID p_particles, bool p_enable) { @@ -419,7 +418,7 @@ void ParticlesStorage::particles_set_trails(RID p_particles, bool p_enable, doub particles->prev_phase = 0; particles->clear = true; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_PARTICLES); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_PARTICLES); } void ParticlesStorage::particles_set_trail_bind_poses(RID p_particles, const Vector<Transform3D> &p_bind_poses) { @@ -436,7 +435,7 @@ void ParticlesStorage::particles_set_trail_bind_poses(RID p_particles, const Vec particles->trail_bind_poses = p_bind_poses; particles->trail_bind_poses_dirty = true; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_PARTICLES); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_PARTICLES); } void ParticlesStorage::particles_set_collision_base_size(RID p_particles, real_t p_size) { @@ -458,7 +457,7 @@ void ParticlesStorage::particles_set_process_material(RID p_particles, RID p_mat ERR_FAIL_COND(!particles); particles->process_material = p_material; - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_PARTICLES); //the instance buffer may have changed + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_PARTICLES); //the instance buffer may have changed } RID ParticlesStorage::particles_get_process_material(RID p_particles) const { @@ -545,7 +544,7 @@ void ParticlesStorage::particles_emit(RID p_particles, const Transform3D &p_tran int32_t idx = particles->emission_buffer->particle_count; if (idx < particles->emission_buffer->particle_max) { - RendererStorageRD::store_transform(p_transform, particles->emission_buffer->data[idx].xform); + RendererRD::MaterialStorage::store_transform(p_transform, particles->emission_buffer->data[idx].xform); particles->emission_buffer->data[idx].velocity[0] = p_velocity.x; particles->emission_buffer->data[idx].velocity[1] = p_velocity.y; @@ -766,9 +765,9 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta frame_params.randomness = p_particles->randomness; if (p_particles->use_local_coords) { - RendererStorageRD::store_transform(Transform3D(), frame_params.emission_transform); + RendererRD::MaterialStorage::store_transform(Transform3D(), frame_params.emission_transform); } else { - RendererStorageRD::store_transform(p_particles->emission_transform, frame_params.emission_transform); + RendererRD::MaterialStorage::store_transform(p_particles->emission_transform, frame_params.emission_transform); } frame_params.cycle = p_particles->cycle_number; @@ -858,7 +857,7 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta ParticlesFrameParams::Attractor &attr = frame_params.attractors[frame_params.attractor_count]; - RendererStorageRD::store_transform(to_collider, attr.transform); + RendererRD::MaterialStorage::store_transform(to_collider, attr.transform); attr.strength = pc->attractor_strength; attr.attenuation = pc->attractor_attenuation; attr.directionality = pc->attractor_directionality; @@ -906,7 +905,7 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta ParticlesFrameParams::Collider &col = frame_params.colliders[frame_params.collider_count]; - RendererStorageRD::store_transform(to_collider, col.transform); + RendererRD::MaterialStorage::store_transform(to_collider, col.transform); switch (pc->type) { case RS::PARTICLES_COLLISION_TYPE_SPHERE_COLLIDE: { col.type = ParticlesFrameParams::COLLISION_TYPE_SPHERE; @@ -1203,7 +1202,7 @@ void ParticlesStorage::particles_set_view_axis(RID p_particles, const Vector3 &p RD::get_singleton()->compute_list_dispatch_threads(compute_list, particles->amount, 1, 1); RD::get_singleton()->compute_list_end(); - RendererStorageRD::base_singleton->get_effects()->sort_buffer(particles->particles_sort_uniform_set, particles->amount); + RendererCompositorRD::singleton->get_effects()->sort_buffer(particles->particles_sort_uniform_set, particles->amount); } copy_push_constant.total_particles *= copy_push_constant.total_particles; @@ -1383,7 +1382,7 @@ void ParticlesStorage::update_particles() { } for (int i = 0; i < particles->trail_bind_poses.size(); i++) { - RendererStorageRD::store_transform(particles->trail_bind_poses[i], &particles_shader.pose_update_buffer[i * 16]); + RendererRD::MaterialStorage::store_transform(particles->trail_bind_poses[i], &particles_shader.pose_update_buffer[i * 16]); } RD::get_singleton()->buffer_update(particles->trail_bind_pose_buffer, 0, particles->trail_bind_poses.size() * 16 * sizeof(float), particles_shader.pose_update_buffer.ptr()); @@ -1457,14 +1456,14 @@ void ParticlesStorage::update_particles() { // In local mode, particle positions are calculated locally (relative to the node position) // and they're also drawn locally. // It works as expected, so we just pass an identity transform. - RendererStorageRD::store_transform(Transform3D(), copy_push_constant.inv_emission_transform); + RendererRD::MaterialStorage::store_transform(Transform3D(), copy_push_constant.inv_emission_transform); } else { // In global mode, particle positions are calculated globally (relative to the canvas origin) // but they're drawn locally. // So, we need to pass the inverse of the emission transform to bring the // particles to local coordinates before drawing. Transform3D inv = particles->emission_transform.affine_inverse(); - RendererStorageRD::store_transform(inv, copy_push_constant.inv_emission_transform); + RendererRD::MaterialStorage::store_transform(inv, copy_push_constant.inv_emission_transform); } copy_push_constant.total_particles = total_amount; @@ -1500,7 +1499,7 @@ void ParticlesStorage::update_particles() { RD::get_singleton()->compute_list_end(); } - particles->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + particles->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } } @@ -1756,7 +1755,7 @@ void ParticlesStorage::particles_collision_set_collision_type(RID p_particles_co particles_collision->heightfield_texture = RID(); } particles_collision->type = p_type; - particles_collision->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + particles_collision->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void ParticlesStorage::particles_collision_set_cull_mask(RID p_particles_collision, uint32_t p_cull_mask) { @@ -1770,7 +1769,7 @@ void ParticlesStorage::particles_collision_set_sphere_radius(RID p_particles_col ERR_FAIL_COND(!particles_collision); particles_collision->radius = p_radius; - particles_collision->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + particles_collision->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void ParticlesStorage::particles_collision_set_box_extents(RID p_particles_collision, const Vector3 &p_extents) { @@ -1778,7 +1777,7 @@ void ParticlesStorage::particles_collision_set_box_extents(RID p_particles_colli ERR_FAIL_COND(!particles_collision); particles_collision->extents = p_extents; - particles_collision->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + particles_collision->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void ParticlesStorage::particles_collision_set_attractor_strength(RID p_particles_collision, real_t p_strength) { @@ -1812,7 +1811,7 @@ void ParticlesStorage::particles_collision_set_field_texture(RID p_particles_col void ParticlesStorage::particles_collision_height_field_update(RID p_particles_collision) { ParticlesCollision *particles_collision = particles_collision_owner.get_or_null(p_particles_collision); ERR_FAIL_COND(!particles_collision); - particles_collision->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + particles_collision->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void ParticlesStorage::particles_collision_set_height_field_resolution(RID p_particles_collision, RS::ParticlesCollisionHeightfieldResolution p_resolution) { diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.h b/servers/rendering/renderer_rd/storage_rd/particles_storage.h index 115633d17a..70ac6f0349 100644 --- a/servers/rendering/renderer_rd/storage_rd/particles_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.h @@ -37,9 +37,9 @@ #include "servers/rendering/renderer_rd/shaders/particles.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/particles_copy.glsl.gen.h" #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/shader_compiler.h" #include "servers/rendering/storage/particles_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererRD { @@ -226,7 +226,7 @@ struct Particles { HashSet<RID> collisions; - RendererStorage::Dependency dependency; + Dependency dependency; double trail_length = 1.0; bool trails_enabled = false; @@ -254,7 +254,7 @@ struct ParticlesCollision { RS::ParticlesCollisionHeightfieldResolution heightfield_resolution = RS::PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_1024; - RendererStorage::Dependency dependency; + Dependency dependency; }; struct ParticlesCollisionInstance { diff --git a/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp b/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp index 329c23bad0..1109357a74 100644 --- a/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp @@ -1712,7 +1712,7 @@ void TextureStorage::decal_set_extents(RID p_decal, const Vector3 &p_extents) { Decal *decal = decal_owner.get_or_null(p_decal); ERR_FAIL_COND(!decal); decal->extents = p_extents; - decal->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + decal->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void TextureStorage::decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID p_texture) { @@ -1736,7 +1736,7 @@ void TextureStorage::decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID texture_add_to_decal_atlas(decal->textures[p_type]); } - decal->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_DECAL); + decal->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_DECAL); } void TextureStorage::decal_set_emission_energy(RID p_decal, float p_energy) { @@ -1761,7 +1761,7 @@ void TextureStorage::decal_set_cull_mask(RID p_decal, uint32_t p_layers) { Decal *decal = decal_owner.get_or_null(p_decal); ERR_FAIL_COND(!decal); decal->cull_mask = p_layers; - decal->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); + decal->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); } void TextureStorage::decal_set_distance_fade(RID p_decal, bool p_enabled, float p_begin, float p_length) { diff --git a/servers/rendering/renderer_rd/storage_rd/texture_storage.h b/servers/rendering/renderer_rd/storage_rd/texture_storage.h index 901f764085..7a96e6c6ed 100644 --- a/servers/rendering/renderer_rd/storage_rd/texture_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/texture_storage.h @@ -33,8 +33,8 @@ #include "core/templates/rid_owner.h" #include "servers/rendering/renderer_rd/shaders/canvas_sdf.glsl.gen.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/storage/texture_storage.h" +#include "servers/rendering/storage/utilities.h" namespace RendererRD { @@ -193,7 +193,7 @@ struct Decal { float distance_fade_length = 1; float normal_fade = 0.0; - RendererStorage::Dependency dependency; + Dependency dependency; }; struct RenderTarget { diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/storage_rd/utilities.cpp index 8c55ff1d0a..a1f62c16c7 100644 --- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp +++ b/servers/rendering/renderer_rd/storage_rd/utilities.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* renderer_storage_rd.cpp */ +/* utilities.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,195 +28,29 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "renderer_storage_rd.h" - -#include "core/config/engine.h" -#include "core/config/project_settings.h" -#include "core/io/resource_loader.h" -#include "core/math/math_defs.h" -#include "renderer_compositor_rd.h" -#include "servers/rendering/renderer_rd/environment/gi.h" -#include "servers/rendering/renderer_rd/storage_rd/light_storage.h" -#include "servers/rendering/renderer_rd/storage_rd/mesh_storage.h" -#include "servers/rendering/renderer_rd/storage_rd/particles_storage.h" -#include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" -#include "servers/rendering/rendering_server_globals.h" -#include "servers/rendering/shader_language.h" - -/* FOG VOLUMES */ - -RID RendererStorageRD::fog_volume_allocate() { - return fog_volume_owner.allocate_rid(); -} -void RendererStorageRD::fog_volume_initialize(RID p_rid) { - fog_volume_owner.initialize_rid(p_rid, FogVolume()); -} - -void RendererStorageRD::fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND(!fog_volume); - - if (p_shape == fog_volume->shape) { - return; - } - - fog_volume->shape = p_shape; - fog_volume->dependency.changed_notify(DEPENDENCY_CHANGED_AABB); -} +#include "utilities.h" +#include "../environment/fog.h" +#include "../environment/gi.h" +#include "light_storage.h" +#include "mesh_storage.h" +#include "particles_storage.h" +#include "texture_storage.h" -void RendererStorageRD::fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND(!fog_volume); +using namespace RendererRD; - fog_volume->extents = p_extents; - fog_volume->dependency.changed_notify(DEPENDENCY_CHANGED_AABB); -} +Utilities *Utilities::singleton = nullptr; -void RendererStorageRD::fog_volume_set_material(RID p_fog_volume, RID p_material) { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND(!fog_volume); - fog_volume->material = p_material; +Utilities::Utilities() { + singleton = this; } -RID RendererStorageRD::fog_volume_get_material(RID p_fog_volume) const { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND_V(!fog_volume, RID()); - - return fog_volume->material; +Utilities::~Utilities() { + singleton = nullptr; } -RS::FogVolumeShape RendererStorageRD::fog_volume_get_shape(RID p_fog_volume) const { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND_V(!fog_volume, RS::FOG_VOLUME_SHAPE_BOX); - - return fog_volume->shape; -} +/* INSTANCES */ -AABB RendererStorageRD::fog_volume_get_aabb(RID p_fog_volume) const { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND_V(!fog_volume, AABB()); - - switch (fog_volume->shape) { - case RS::FOG_VOLUME_SHAPE_ELLIPSOID: - case RS::FOG_VOLUME_SHAPE_CONE: - case RS::FOG_VOLUME_SHAPE_CYLINDER: - case RS::FOG_VOLUME_SHAPE_BOX: { - AABB aabb; - aabb.position = -fog_volume->extents; - aabb.size = fog_volume->extents * 2; - return aabb; - } - default: { - // Need some size otherwise will get culled - return AABB(Vector3(-1, -1, -1), Vector3(2, 2, 2)); - } - } - - return AABB(); -} - -Vector3 RendererStorageRD::fog_volume_get_extents(RID p_fog_volume) const { - const FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); - ERR_FAIL_COND_V(!fog_volume, Vector3()); - return fog_volume->extents; -} - -/* VISIBILITY NOTIFIER */ - -RID RendererStorageRD::visibility_notifier_allocate() { - return visibility_notifier_owner.allocate_rid(); -} -void RendererStorageRD::visibility_notifier_initialize(RID p_notifier) { - visibility_notifier_owner.initialize_rid(p_notifier, VisibilityNotifier()); -} -void RendererStorageRD::visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) { - VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); - ERR_FAIL_COND(!vn); - vn->aabb = p_aabb; - vn->dependency.changed_notify(DEPENDENCY_CHANGED_AABB); -} -void RendererStorageRD::visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) { - VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); - ERR_FAIL_COND(!vn); - vn->enter_callback = p_enter_callbable; - vn->exit_callback = p_exit_callable; -} - -AABB RendererStorageRD::visibility_notifier_get_aabb(RID p_notifier) const { - const VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); - ERR_FAIL_COND_V(!vn, AABB()); - return vn->aabb; -} -void RendererStorageRD::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) { - VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); - ERR_FAIL_COND(!vn); - - if (p_enter) { - if (!vn->enter_callback.is_null()) { - if (p_deferred) { - vn->enter_callback.call_deferred(nullptr, 0); - } else { - Variant r; - Callable::CallError ce; - vn->enter_callback.call(nullptr, 0, r, ce); - } - } - } else { - if (!vn->exit_callback.is_null()) { - if (p_deferred) { - vn->exit_callback.call_deferred(nullptr, 0); - } else { - Variant r; - Callable::CallError ce; - vn->exit_callback.call(nullptr, 0, r, ce); - } - } - } -} - -/* misc */ - -void RendererStorageRD::base_update_dependency(RID p_base, DependencyTracker *p_instance) { - if (RendererRD::MeshStorage::get_singleton()->owns_mesh(p_base)) { - RendererRD::Mesh *mesh = RendererRD::MeshStorage::get_singleton()->get_mesh(p_base); - p_instance->update_dependency(&mesh->dependency); - } else if (RendererRD::MeshStorage::get_singleton()->owns_multimesh(p_base)) { - RendererRD::MultiMesh *multimesh = RendererRD::MeshStorage::get_singleton()->get_multimesh(p_base); - p_instance->update_dependency(&multimesh->dependency); - if (multimesh->mesh.is_valid()) { - base_update_dependency(multimesh->mesh, p_instance); - } - } else if (RendererRD::LightStorage::get_singleton()->owns_reflection_probe(p_base)) { - RendererRD::ReflectionProbe *rp = RendererRD::LightStorage::get_singleton()->get_reflection_probe(p_base); - p_instance->update_dependency(&rp->dependency); - } else if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_base)) { - RendererRD::Decal *decal = RendererRD::TextureStorage::get_singleton()->get_decal(p_base); - p_instance->update_dependency(&decal->dependency); - } else if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_base)) { - RendererRD::GI::VoxelGI *gip = RendererRD::GI::get_singleton()->get_voxel_gi(p_base); - p_instance->update_dependency(&gip->dependency); - } else if (RendererRD::LightStorage::get_singleton()->owns_lightmap(p_base)) { - RendererRD::Lightmap *lm = RendererRD::LightStorage::get_singleton()->get_lightmap(p_base); - p_instance->update_dependency(&lm->dependency); - } else if (RendererRD::LightStorage::get_singleton()->owns_light(p_base)) { - RendererRD::Light *l = RendererRD::LightStorage::get_singleton()->get_light(p_base); - p_instance->update_dependency(&l->dependency); - } else if (RendererRD::ParticlesStorage::get_singleton()->owns_particles(p_base)) { - RendererRD::Particles *p = RendererRD::ParticlesStorage::get_singleton()->get_particles(p_base); - p_instance->update_dependency(&p->dependency); - } else if (RendererRD::ParticlesStorage::get_singleton()->owns_particles_collision(p_base)) { - RendererRD::ParticlesCollision *pc = RendererRD::ParticlesStorage::get_singleton()->get_particles_collision(p_base); - p_instance->update_dependency(&pc->dependency); - } else if (fog_volume_owner.owns(p_base)) { - FogVolume *fv = fog_volume_owner.get_or_null(p_base); - p_instance->update_dependency(&fv->dependency); - } else if (visibility_notifier_owner.owns(p_base)) { - VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_base); - p_instance->update_dependency(&vn->dependency); - } -} - -RS::InstanceType RendererStorageRD::get_base_type(RID p_rid) const { +RS::InstanceType Utilities::get_base_type(RID p_rid) const { if (RendererRD::MeshStorage::get_singleton()->owns_mesh(p_rid)) { return RS::INSTANCE_MESH; } @@ -244,49 +78,17 @@ RS::InstanceType RendererStorageRD::get_base_type(RID p_rid) const { if (RendererRD::ParticlesStorage::get_singleton()->owns_particles_collision(p_rid)) { return RS::INSTANCE_PARTICLES_COLLISION; } - if (fog_volume_owner.owns(p_rid)) { + if (RendererRD::Fog::get_singleton()->owns_fog_volume(p_rid)) { return RS::INSTANCE_FOG_VOLUME; } - if (visibility_notifier_owner.owns(p_rid)) { + if (owns_visibility_notifier(p_rid)) { return RS::INSTANCE_VISIBLITY_NOTIFIER; } return RS::INSTANCE_NONE; } -void RendererStorageRD::update_dirty_resources() { - RendererRD::MaterialStorage::get_singleton()->_update_global_variables(); //must do before materials, so it can queue them for update - RendererRD::MaterialStorage::get_singleton()->_update_queued_materials(); - RendererRD::MeshStorage::get_singleton()->_update_dirty_multimeshes(); - RendererRD::MeshStorage::get_singleton()->_update_dirty_skeletons(); - RendererRD::TextureStorage::get_singleton()->update_decal_atlas(); -} - -bool RendererStorageRD::has_os_feature(const String &p_feature) const { - if (!RD::get_singleton()) { - return false; - } - - if (p_feature == "rgtc" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_BC5_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { - return true; - } - - if (p_feature == "s3tc" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_BC1_RGB_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { - return true; - } - - if (p_feature == "bptc" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_BC7_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { - return true; - } - - if ((p_feature == "etc" || p_feature == "etc2") && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { - return true; - } - - return false; -} - -bool RendererStorageRD::free(RID p_rid) { +bool Utilities::free(RID p_rid) { if (RendererRD::TextureStorage::get_singleton()->owns_texture(p_rid)) { RendererRD::TextureStorage::get_singleton()->texture_free(p_rid); } else if (RendererRD::TextureStorage::get_singleton()->owns_canvas_texture(p_rid)) { @@ -317,16 +119,12 @@ bool RendererStorageRD::free(RID p_rid) { RendererRD::ParticlesStorage::get_singleton()->particles_free(p_rid); } else if (RendererRD::ParticlesStorage::get_singleton()->owns_particles_collision(p_rid)) { RendererRD::ParticlesStorage::get_singleton()->particles_collision_free(p_rid); - } else if (visibility_notifier_owner.owns(p_rid)) { - VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_rid); - vn->dependency.deleted_notify(p_rid); - visibility_notifier_owner.free(p_rid); + } else if (owns_visibility_notifier(p_rid)) { + visibility_notifier_free(p_rid); } else if (RendererRD::ParticlesStorage::get_singleton()->owns_particles_collision_instance(p_rid)) { RendererRD::ParticlesStorage::get_singleton()->particles_collision_instance_free(p_rid); - } else if (fog_volume_owner.owns(p_rid)) { - FogVolume *fog_volume = fog_volume_owner.get_or_null(p_rid); - fog_volume->dependency.deleted_notify(p_rid); - fog_volume_owner.free(p_rid); + } else if (RendererRD::Fog::get_singleton()->owns_fog_volume(p_rid)) { + RendererRD::Fog::get_singleton()->fog_free(p_rid); } else if (RendererRD::TextureStorage::get_singleton()->owns_render_target(p_rid)) { RendererRD::TextureStorage::get_singleton()->render_target_free(p_rid); } else { @@ -336,49 +134,182 @@ bool RendererStorageRD::free(RID p_rid) { return true; } -void RendererStorageRD::init_effects(bool p_prefer_raster_effects) { - effects = memnew(EffectsRD(p_prefer_raster_effects)); +/* DEPENDENCIES */ + +void Utilities::base_update_dependency(RID p_base, DependencyTracker *p_instance) { + if (MeshStorage::get_singleton()->owns_mesh(p_base)) { + Mesh *mesh = MeshStorage::get_singleton()->get_mesh(p_base); + p_instance->update_dependency(&mesh->dependency); + } else if (MeshStorage::get_singleton()->owns_multimesh(p_base)) { + MultiMesh *multimesh = MeshStorage::get_singleton()->get_multimesh(p_base); + p_instance->update_dependency(&multimesh->dependency); + if (multimesh->mesh.is_valid()) { + base_update_dependency(multimesh->mesh, p_instance); + } + } else if (LightStorage::get_singleton()->owns_reflection_probe(p_base)) { + ReflectionProbe *rp = LightStorage::get_singleton()->get_reflection_probe(p_base); + p_instance->update_dependency(&rp->dependency); + } else if (TextureStorage::get_singleton()->owns_decal(p_base)) { + Decal *decal = TextureStorage::get_singleton()->get_decal(p_base); + p_instance->update_dependency(&decal->dependency); + } else if (GI::get_singleton()->owns_voxel_gi(p_base)) { + GI::VoxelGI *gip = GI::get_singleton()->get_voxel_gi(p_base); + p_instance->update_dependency(&gip->dependency); + } else if (LightStorage::get_singleton()->owns_lightmap(p_base)) { + Lightmap *lm = LightStorage::get_singleton()->get_lightmap(p_base); + p_instance->update_dependency(&lm->dependency); + } else if (LightStorage::get_singleton()->owns_light(p_base)) { + Light *l = LightStorage::get_singleton()->get_light(p_base); + p_instance->update_dependency(&l->dependency); + } else if (ParticlesStorage::get_singleton()->owns_particles(p_base)) { + Particles *p = ParticlesStorage::get_singleton()->get_particles(p_base); + p_instance->update_dependency(&p->dependency); + } else if (ParticlesStorage::get_singleton()->owns_particles_collision(p_base)) { + ParticlesCollision *pc = ParticlesStorage::get_singleton()->get_particles_collision(p_base); + p_instance->update_dependency(&pc->dependency); + } else if (Fog::get_singleton()->owns_fog_volume(p_base)) { + Fog::FogVolume *fv = Fog::get_singleton()->get_fog_volume(p_base); + p_instance->update_dependency(&fv->dependency); + } else if (owns_visibility_notifier(p_base)) { + VisibilityNotifier *vn = get_visibility_notifier(p_base); + p_instance->update_dependency(&vn->dependency); + } +} + +/* VISIBILITY NOTIFIER */ + +RID Utilities::visibility_notifier_allocate() { + return visibility_notifier_owner.allocate_rid(); +} + +void Utilities::visibility_notifier_initialize(RID p_notifier) { + visibility_notifier_owner.initialize_rid(p_notifier, VisibilityNotifier()); +} + +void Utilities::visibility_notifier_free(RID p_notifier) { + VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); + vn->dependency.deleted_notify(p_notifier); + visibility_notifier_owner.free(p_notifier); +} + +void Utilities::visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) { + VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); + ERR_FAIL_COND(!vn); + vn->aabb = p_aabb; + vn->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB); +} + +void Utilities::visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) { + VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); + ERR_FAIL_COND(!vn); + vn->enter_callback = p_enter_callbable; + vn->exit_callback = p_exit_callable; +} + +AABB Utilities::visibility_notifier_get_aabb(RID p_notifier) const { + const VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); + ERR_FAIL_COND_V(!vn, AABB()); + return vn->aabb; } -EffectsRD *RendererStorageRD::get_effects() { - ERR_FAIL_NULL_V_MSG(effects, nullptr, "Effects haven't been initialised yet."); - return effects; +void Utilities::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) { + VisibilityNotifier *vn = visibility_notifier_owner.get_or_null(p_notifier); + ERR_FAIL_COND(!vn); + + if (p_enter) { + if (!vn->enter_callback.is_null()) { + if (p_deferred) { + vn->enter_callback.call_deferred(nullptr, 0); + } else { + Variant r; + Callable::CallError ce; + vn->enter_callback.call(nullptr, 0, r, ce); + } + } + } else { + if (!vn->exit_callback.is_null()) { + if (p_deferred) { + vn->exit_callback.call_deferred(nullptr, 0); + } else { + Variant r; + Callable::CallError ce; + vn->exit_callback.call(nullptr, 0, r, ce); + } + } + } } -void RendererStorageRD::capture_timestamps_begin() { +/* TIMING */ + +void Utilities::capture_timestamps_begin() { RD::get_singleton()->capture_timestamp("Frame Begin"); } -void RendererStorageRD::capture_timestamp(const String &p_name) { +void Utilities::capture_timestamp(const String &p_name) { RD::get_singleton()->capture_timestamp(p_name); } -uint32_t RendererStorageRD::get_captured_timestamps_count() const { +uint32_t Utilities::get_captured_timestamps_count() const { return RD::get_singleton()->get_captured_timestamps_count(); } -uint64_t RendererStorageRD::get_captured_timestamps_frame() const { +uint64_t Utilities::get_captured_timestamps_frame() const { return RD::get_singleton()->get_captured_timestamps_frame(); } -uint64_t RendererStorageRD::get_captured_timestamp_gpu_time(uint32_t p_index) const { +uint64_t Utilities::get_captured_timestamp_gpu_time(uint32_t p_index) const { return RD::get_singleton()->get_captured_timestamp_gpu_time(p_index); } -uint64_t RendererStorageRD::get_captured_timestamp_cpu_time(uint32_t p_index) const { +uint64_t Utilities::get_captured_timestamp_cpu_time(uint32_t p_index) const { return RD::get_singleton()->get_captured_timestamp_cpu_time(p_index); } -String RendererStorageRD::get_captured_timestamp_name(uint32_t p_index) const { +String Utilities::get_captured_timestamp_name(uint32_t p_index) const { return RD::get_singleton()->get_captured_timestamp_name(p_index); } -void RendererStorageRD::update_memory_info() { +/* MISC */ + +void Utilities::update_dirty_resources() { + MaterialStorage::get_singleton()->_update_global_variables(); //must do before materials, so it can queue them for update + MaterialStorage::get_singleton()->_update_queued_materials(); + MeshStorage::get_singleton()->_update_dirty_multimeshes(); + MeshStorage::get_singleton()->_update_dirty_skeletons(); + TextureStorage::get_singleton()->update_decal_atlas(); +} + +bool Utilities::has_os_feature(const String &p_feature) const { + if (!RD::get_singleton()) { + return false; + } + + if (p_feature == "rgtc" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_BC5_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { + return true; + } + + if (p_feature == "s3tc" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_BC1_RGB_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { + return true; + } + + if (p_feature == "bptc" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_BC7_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { + return true; + } + + if ((p_feature == "etc" || p_feature == "etc2") && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) { + return true; + } + + return false; +} + +void Utilities::update_memory_info() { texture_mem_cache = RenderingDevice::get_singleton()->get_memory_usage(RenderingDevice::MEMORY_TEXTURES); buffer_mem_cache = RenderingDevice::get_singleton()->get_memory_usage(RenderingDevice::MEMORY_BUFFERS); total_mem_cache = RenderingDevice::get_singleton()->get_memory_usage(RenderingDevice::MEMORY_TOTAL); } -uint64_t RendererStorageRD::get_rendering_info(RS::RenderingInfo p_info) { + +uint64_t Utilities::get_rendering_info(RS::RenderingInfo p_info) { if (p_info == RS::RENDERING_INFO_TEXTURE_MEM_USED) { return texture_mem_cache; } else if (p_info == RS::RENDERING_INFO_BUFFER_MEM_USED) { @@ -389,31 +320,18 @@ uint64_t RendererStorageRD::get_rendering_info(RS::RenderingInfo p_info) { return 0; } -String RendererStorageRD::get_video_adapter_name() const { +String Utilities::get_video_adapter_name() const { return RenderingDevice::get_singleton()->get_device_name(); } -String RendererStorageRD::get_video_adapter_vendor() const { +String Utilities::get_video_adapter_vendor() const { return RenderingDevice::get_singleton()->get_device_vendor_name(); } -RenderingDevice::DeviceType RendererStorageRD::get_video_adapter_type() const { +RenderingDevice::DeviceType Utilities::get_video_adapter_type() const { return RenderingDevice::get_singleton()->get_device_type(); } -String RendererStorageRD::get_video_adapter_api_version() const { +String Utilities::get_video_adapter_api_version() const { return RenderingDevice::get_singleton()->get_device_api_version(); } - -RendererStorageRD *RendererStorageRD::base_singleton = nullptr; - -RendererStorageRD::RendererStorageRD() { - base_singleton = this; -} - -RendererStorageRD::~RendererStorageRD() { - if (effects) { - memdelete(effects); - effects = nullptr; - } -} diff --git a/servers/rendering/renderer_rd/storage_rd/utilities.h b/servers/rendering/renderer_rd/storage_rd/utilities.h new file mode 100644 index 0000000000..979e984546 --- /dev/null +++ b/servers/rendering/renderer_rd/storage_rd/utilities.h @@ -0,0 +1,122 @@ +/*************************************************************************/ +/* utilities.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef UTILITIES_RD_H +#define UTILITIES_RD_H + +#include "core/templates/rid_owner.h" +#include "servers/rendering/storage/utilities.h" + +namespace RendererRD { + +/* VISIBILITY NOTIFIER */ + +struct VisibilityNotifier { + AABB aabb; + Callable enter_callback; + Callable exit_callback; + Dependency dependency; +}; + +class Utilities : public RendererUtilities { +private: + static Utilities *singleton; + + /* VISIBILITY NOTIFIER */ + + mutable RID_Owner<VisibilityNotifier> visibility_notifier_owner; + + /* MISC */ + + //keep cached since it can be called form any thread + uint64_t texture_mem_cache = 0; + uint64_t buffer_mem_cache = 0; + uint64_t total_mem_cache = 0; + +public: + static Utilities *get_singleton() { return singleton; } + + Utilities(); + virtual ~Utilities() override; + + /* INSTANCES */ + + virtual RS::InstanceType get_base_type(RID p_rid) const override; + virtual bool free(RID p_rid) override; + + /* DEPENDENCIES */ + + virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override; + + /* VISIBILITY NOTIFIER */ + + VisibilityNotifier *get_visibility_notifier(RID p_rid) { return visibility_notifier_owner.get_or_null(p_rid); }; + bool owns_visibility_notifier(RID p_rid) const { return visibility_notifier_owner.owns(p_rid); }; + + virtual RID visibility_notifier_allocate() override; + virtual void visibility_notifier_initialize(RID p_notifier) override; + virtual void visibility_notifier_free(RID p_notifier) override; + + virtual void visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) override; + virtual void visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) override; + + virtual AABB visibility_notifier_get_aabb(RID p_notifier) const override; + virtual void visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) override; + + /* TIMING */ + + virtual void capture_timestamps_begin() override; + virtual void capture_timestamp(const String &p_name) override; + virtual uint32_t get_captured_timestamps_count() const override; + virtual uint64_t get_captured_timestamps_frame() const override; + virtual uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const override; + virtual uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const override; + virtual String get_captured_timestamp_name(uint32_t p_index) const override; + + /* MISC */ + + virtual void update_dirty_resources() override; + virtual void set_debug_generate_wireframes(bool p_generate) override {} + + virtual bool has_os_feature(const String &p_feature) const override; + + virtual void update_memory_info() override; + + virtual uint64_t get_rendering_info(RS::RenderingInfo p_info) override; + + virtual String get_video_adapter_name() const override; + virtual String get_video_adapter_vendor() const override; + virtual RenderingDevice::DeviceType get_video_adapter_type() const override; + virtual String get_video_adapter_api_version() const override; +}; + +} // namespace RendererRD + +#endif // !UTILITIES_RD_H diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 325907ee85..aaf7ab8efd 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -470,7 +470,7 @@ void RendererSceneCull::_instance_update_mesh_instance(Instance *p_instance) { p_instance->mesh_instance = RSG::mesh_storage->mesh_instance_create(p_instance->base); } else { - RSG::storage->free(p_instance->mesh_instance); + RSG::mesh_storage->mesh_free(p_instance->mesh_instance); p_instance->mesh_instance = RID(); } @@ -506,7 +506,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { } if (instance->mesh_instance.is_valid()) { - RSG::storage->free(instance->mesh_instance); + RSG::mesh_storage->mesh_free(instance->mesh_instance); instance->mesh_instance = RID(); // no need to set instance data flag here, as it was freed above } @@ -538,7 +538,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { } break; case RS::INSTANCE_PARTICLES_COLLISION: { InstanceParticlesCollisionData *collision = static_cast<InstanceParticlesCollisionData *>(instance->base_data); - RSG::storage->free(collision->instance); + RSG::utilities->free(collision->instance); } break; case RS::INSTANCE_FOG_VOLUME: { InstanceFogVolumeData *volume = static_cast<InstanceFogVolumeData *>(instance->base_data); @@ -607,7 +607,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { instance->base = RID(); if (p_base.is_valid()) { - instance->base_type = RSG::storage->get_base_type(p_base); + instance->base_type = RSG::utilities->get_base_type(p_base); // fix up a specific malfunctioning case before the switch, so it can be handled if (instance->base_type == RS::INSTANCE_NONE && RendererSceneOcclusionCull::get_singleton()->is_occluder(p_base)) { @@ -724,7 +724,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { } //forcefully update the dependency now, so if for some reason it gets removed, we can immediately clear it - RSG::storage->base_update_dependency(p_base, &instance->dependency_tracker); + RSG::utilities->base_update_dependency(p_base, &instance->dependency_tracker); } _instance_queue_update(instance, true, true); @@ -1876,10 +1876,10 @@ void RendererSceneCull::_update_instance_aabb(Instance *p_instance) { } break; case RenderingServer::INSTANCE_FOG_VOLUME: { - new_aabb = RSG::storage->fog_volume_get_aabb(p_instance->base); + new_aabb = RSG::fog->fog_volume_get_aabb(p_instance->base); } break; case RenderingServer::INSTANCE_VISIBLITY_NOTIFIER: { - new_aabb = RSG::storage->visibility_notifier_get_aabb(p_instance->base); + new_aabb = RSG::utilities->visibility_notifier_get_aabb(p_instance->base); } break; case RenderingServer::INSTANCE_LIGHT: { new_aabb = RSG::light_storage->light_get_aabb(p_instance->base); @@ -3677,7 +3677,7 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) { p_instance->dependency_tracker.update_begin(); if (p_instance->base.is_valid()) { - RSG::storage->base_update_dependency(p_instance->base, &p_instance->dependency_tracker); + RSG::utilities->base_update_dependency(p_instance->base, &p_instance->dependency_tracker); } if (p_instance->material_override.is_valid()) { @@ -3785,7 +3785,7 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) { can_cast_shadows = false; } - RSG::storage->base_update_dependency(mesh, &p_instance->dependency_tracker); + RSG::utilities->base_update_dependency(mesh, &p_instance->dependency_tracker); } } else if (p_instance->base_type == RS::INSTANCE_PARTICLES) { bool cast_shadows = false; @@ -3885,7 +3885,7 @@ void RendererSceneCull::_update_dirty_instance(Instance *p_instance) { } void RendererSceneCull::update_dirty_instances() { - RSG::storage->update_dirty_resources(); + RSG::utilities->update_dirty_resources(); while (_instance_update_list.first()) { _update_dirty_instance(_instance_update_list.first()->self()); @@ -3978,12 +3978,12 @@ void RendererSceneCull::update_visibility_notifiers() { if (visibility_notifier->just_visible) { visibility_notifier->just_visible = false; - RSG::storage->visibility_notifier_call(visibility_notifier->base, true, RSG::threaded); + RSG::utilities->visibility_notifier_call(visibility_notifier->base, true, RSG::threaded); } else { if (visibility_notifier->visible_in_frame != RSG::rasterizer->get_frame_number()) { visible_notifier_list.remove(E); - RSG::storage->visibility_notifier_call(visibility_notifier->base, false, RSG::threaded); + RSG::utilities->visibility_notifier_call(visibility_notifier->base, false, RSG::threaded); } } diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h index 4880221586..198898141e 100644 --- a/servers/rendering/renderer_scene_cull.h +++ b/servers/rendering/renderer_scene_cull.h @@ -42,7 +42,7 @@ #include "servers/rendering/renderer_scene.h" #include "servers/rendering/renderer_scene_occlusion_cull.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering/renderer_storage.h" +#include "servers/rendering/storage/utilities.h" #include "servers/xr/xr_interface.h" class RendererSceneCull : public RendererScene { @@ -470,32 +470,32 @@ public: SelfList<InstancePair>::List pairs; uint64_t pair_check; - RendererStorage::DependencyTracker dependency_tracker; + DependencyTracker dependency_tracker; - static void dependency_changed(RendererStorage::DependencyChangedNotification p_notification, RendererStorage::DependencyTracker *tracker) { + static void dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *tracker) { Instance *instance = (Instance *)tracker->userdata; switch (p_notification) { - case RendererStorage::DEPENDENCY_CHANGED_SKELETON_DATA: - case RendererStorage::DEPENDENCY_CHANGED_AABB: { + case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: + case Dependency::DEPENDENCY_CHANGED_AABB: { singleton->_instance_queue_update(instance, true, false); } break; - case RendererStorage::DEPENDENCY_CHANGED_MATERIAL: { + case Dependency::DEPENDENCY_CHANGED_MATERIAL: { singleton->_instance_queue_update(instance, false, true); } break; - case RendererStorage::DEPENDENCY_CHANGED_MESH: - case RendererStorage::DEPENDENCY_CHANGED_PARTICLES: - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH: - case RendererStorage::DEPENDENCY_CHANGED_DECAL: - case RendererStorage::DEPENDENCY_CHANGED_LIGHT: - case RendererStorage::DEPENDENCY_CHANGED_REFLECTION_PROBE: { + case Dependency::DEPENDENCY_CHANGED_MESH: + case Dependency::DEPENDENCY_CHANGED_PARTICLES: + case Dependency::DEPENDENCY_CHANGED_MULTIMESH: + case Dependency::DEPENDENCY_CHANGED_DECAL: + case Dependency::DEPENDENCY_CHANGED_LIGHT: + case Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE: { singleton->_instance_queue_update(instance, true, true); } break; - case RendererStorage::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: - case RendererStorage::DEPENDENCY_CHANGED_SKELETON_BONES: { + case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: + case Dependency::DEPENDENCY_CHANGED_SKELETON_BONES: { //ignored } break; - case RendererStorage::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR: { + case Dependency::DEPENDENCY_CHANGED_LIGHT_SOFT_SHADOW_AND_PROJECTOR: { //requires repairing if (instance->indexer_id.is_valid()) { singleton->_unpair_instance(instance); @@ -506,7 +506,7 @@ public: } } - static void dependency_deleted(const RID &p_dependency, RendererStorage::DependencyTracker *tracker) { + static void dependency_deleted(const RID &p_dependency, DependencyTracker *tracker) { Instance *instance = (Instance *)tracker->userdata; if (p_dependency == instance->base) { diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp index ab9ee2067f..2fccb1fd38 100644 --- a/servers/rendering/renderer_viewport.cpp +++ b/servers/rendering/renderer_viewport.cpp @@ -175,7 +175,7 @@ void RendererViewport::_draw_3d(Viewport *p_viewport) { void RendererViewport::_draw_viewport(Viewport *p_viewport) { if (p_viewport->measure_render_time) { String rt_id = "vp_begin_" + itos(p_viewport->self.get_id()); - RSG::storage->capture_timestamp(rt_id); + RSG::utilities->capture_timestamp(rt_id); timestamp_vp_map[rt_id] = p_viewport->self; } @@ -212,7 +212,7 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { _configure_3d_render_buffers(p_viewport); } - Color bgcolor = p_viewport->transparent_bg ? Color(0, 0, 0, 0) : RSG::storage->get_default_clear_color(); + Color bgcolor = p_viewport->transparent_bg ? Color(0, 0, 0, 0) : RSG::texture_storage->get_default_clear_color(); if (p_viewport->clear_mode != RS::VIEWPORT_CLEAR_NEVER) { RSG::texture_storage->render_target_request_clear(p_viewport->render_target, bgcolor); @@ -521,7 +521,7 @@ void RendererViewport::_draw_viewport(Viewport *p_viewport) { if (p_viewport->measure_render_time) { String rt_id = "vp_end_" + itos(p_viewport->self.get_id()); - RSG::storage->capture_timestamp(rt_id); + RSG::utilities->capture_timestamp(rt_id); timestamp_vp_map[rt_id] = p_viewport->self; } } @@ -1259,7 +1259,7 @@ void RendererViewport::handle_timestamp(String p_timestamp, uint64_t p_cpu_time, } void RendererViewport::set_default_clear_color(const Color &p_color) { - RSG::storage->set_default_clear_color(p_color); + RSG::texture_storage->set_default_clear_color(p_color); } // Workaround for setting this on thread. diff --git a/servers/rendering/rendering_server_default.cpp b/servers/rendering/rendering_server_default.cpp index 7e035bae80..bcd7e6a1dd 100644 --- a/servers/rendering/rendering_server_default.cpp +++ b/servers/rendering/rendering_server_default.cpp @@ -48,7 +48,7 @@ void RenderingServerDefault::_free(RID p_rid) { if (unlikely(p_rid.is_null())) { return; } - if (RSG::storage->free(p_rid)) { + if (RSG::utilities->free(p_rid)) { return; } if (RSG::canvas->free(p_rid)) { @@ -116,35 +116,35 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) { } RS::get_singleton()->emit_signal(SNAME("frame_post_draw")); - if (RSG::storage->get_captured_timestamps_count()) { + if (RSG::utilities->get_captured_timestamps_count()) { Vector<FrameProfileArea> new_profile; - if (RSG::storage->capturing_timestamps) { - new_profile.resize(RSG::storage->get_captured_timestamps_count()); + if (RSG::utilities->capturing_timestamps) { + new_profile.resize(RSG::utilities->get_captured_timestamps_count()); } - uint64_t base_cpu = RSG::storage->get_captured_timestamp_cpu_time(0); - uint64_t base_gpu = RSG::storage->get_captured_timestamp_gpu_time(0); - for (uint32_t i = 0; i < RSG::storage->get_captured_timestamps_count(); i++) { - uint64_t time_cpu = RSG::storage->get_captured_timestamp_cpu_time(i); - uint64_t time_gpu = RSG::storage->get_captured_timestamp_gpu_time(i); + uint64_t base_cpu = RSG::utilities->get_captured_timestamp_cpu_time(0); + uint64_t base_gpu = RSG::utilities->get_captured_timestamp_gpu_time(0); + for (uint32_t i = 0; i < RSG::utilities->get_captured_timestamps_count(); i++) { + uint64_t time_cpu = RSG::utilities->get_captured_timestamp_cpu_time(i); + uint64_t time_gpu = RSG::utilities->get_captured_timestamp_gpu_time(i); - String name = RSG::storage->get_captured_timestamp_name(i); + String name = RSG::utilities->get_captured_timestamp_name(i); if (name.begins_with("vp_")) { RSG::viewport->handle_timestamp(name, time_cpu, time_gpu); } - if (RSG::storage->capturing_timestamps) { + if (RSG::utilities->capturing_timestamps) { new_profile.write[i].gpu_msec = double((time_gpu - base_gpu) / 1000) / 1000.0; new_profile.write[i].cpu_msec = double(time_cpu - base_cpu) / 1000.0; - new_profile.write[i].name = RSG::storage->get_captured_timestamp_name(i); + new_profile.write[i].name = RSG::utilities->get_captured_timestamp_name(i); } } frame_profile = new_profile; } - frame_profile_frame = RSG::storage->get_captured_timestamps_frame(); + frame_profile_frame = RSG::utilities->get_captured_timestamps_frame(); if (print_gpu_profile) { if (print_frame_profile_ticks_from == 0) { @@ -191,7 +191,7 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) { } } - RSG::storage->update_memory_info(); + RSG::utilities->update_memory_info(); } double RenderingServerDefault::get_frame_setup_time_cpu() const { @@ -250,27 +250,27 @@ uint64_t RenderingServerDefault::get_rendering_info(RenderingInfo p_info) { } else if (p_info == RENDERING_INFO_TOTAL_DRAW_CALLS_IN_FRAME) { return RSG::viewport->get_total_draw_calls_used(); } - return RSG::storage->get_rendering_info(p_info); + return RSG::utilities->get_rendering_info(p_info); } String RenderingServerDefault::get_video_adapter_name() const { - return RSG::storage->get_video_adapter_name(); + return RSG::utilities->get_video_adapter_name(); } String RenderingServerDefault::get_video_adapter_vendor() const { - return RSG::storage->get_video_adapter_vendor(); + return RSG::utilities->get_video_adapter_vendor(); } RenderingDevice::DeviceType RenderingServerDefault::get_video_adapter_type() const { - return RSG::storage->get_video_adapter_type(); + return RSG::utilities->get_video_adapter_type(); } String RenderingServerDefault::get_video_adapter_api_version() const { - return RSG::storage->get_video_adapter_api_version(); + return RSG::utilities->get_video_adapter_api_version(); } void RenderingServerDefault::set_frame_profiling_enabled(bool p_enable) { - RSG::storage->capturing_timestamps = p_enable; + RSG::utilities->capturing_timestamps = p_enable; } uint64_t RenderingServerDefault::get_frame_profile_frame() { @@ -301,7 +301,7 @@ void RenderingServerDefault::sdfgi_set_debug_probe_select(const Vector3 &p_posit } void RenderingServerDefault::set_print_gpu_profile(bool p_enable) { - RSG::storage->capturing_timestamps = p_enable; + RSG::utilities->capturing_timestamps = p_enable; print_gpu_profile = p_enable; } @@ -313,15 +313,15 @@ RID RenderingServerDefault::get_test_cube() { } bool RenderingServerDefault::has_os_feature(const String &p_feature) const { - if (RSG::storage) { - return RSG::storage->has_os_feature(p_feature); + if (RSG::utilities) { + return RSG::utilities->has_os_feature(p_feature); } else { return false; } } void RenderingServerDefault::set_debug_generate_wireframes(bool p_generate) { - RSG::storage->set_debug_generate_wireframes(p_generate); + RSG::utilities->set_debug_generate_wireframes(p_generate); } bool RenderingServerDefault::is_low_end() const { @@ -399,13 +399,14 @@ RenderingServerDefault::RenderingServerDefault(bool p_create_thread) : RendererSceneCull *sr = memnew(RendererSceneCull); RSG::scene = sr; RSG::rasterizer = RendererCompositor::create(); + RSG::utilities = RSG::rasterizer->get_utilities(); RSG::light_storage = RSG::rasterizer->get_light_storage(); RSG::material_storage = RSG::rasterizer->get_material_storage(); RSG::mesh_storage = RSG::rasterizer->get_mesh_storage(); RSG::particles_storage = RSG::rasterizer->get_particles_storage(); RSG::texture_storage = RSG::rasterizer->get_texture_storage(); RSG::gi = RSG::rasterizer->get_gi(); - RSG::storage = RSG::rasterizer->get_storage(); + RSG::fog = RSG::rasterizer->get_fog(); RSG::canvas_render = RSG::rasterizer->get_canvas(); sr->set_scene_render(RSG::rasterizer->get_scene()); diff --git a/servers/rendering/rendering_server_default.h b/servers/rendering/rendering_server_default.h index aef89619db..584d9a7a51 100644 --- a/servers/rendering/rendering_server_default.h +++ b/servers/rendering/rendering_server_default.h @@ -31,7 +31,6 @@ #ifndef RENDERING_SERVER_DEFAULT_H #define RENDERING_SERVER_DEFAULT_H -#include "core/math/octree.h" #include "core/templates/command_queue_mt.h" #include "core/templates/hash_map.h" #include "renderer_canvas_cull.h" @@ -524,8 +523,8 @@ public: #undef ServerName #undef server_name -#define ServerName RendererStorage -#define server_name RSG::storage +#define ServerName RendererFog +#define server_name RSG::fog FUNCRIDSPLIT(fog_volume) @@ -535,6 +534,12 @@ public: /* VISIBILITY_NOTIFIER */ +#undef ServerName +#undef server_name + +#define ServerName RendererUtilities +#define server_name RSG::utilities + FUNCRIDSPLIT(visibility_notifier) FUNC2(visibility_notifier_set_aabb, RID, const AABB &) FUNC3(visibility_notifier_set_callbacks, RID, const Callable &, const Callable &) diff --git a/servers/rendering/rendering_server_globals.cpp b/servers/rendering/rendering_server_globals.cpp index 1c2a275265..46fa49e683 100644 --- a/servers/rendering/rendering_server_globals.cpp +++ b/servers/rendering/rendering_server_globals.cpp @@ -32,13 +32,14 @@ bool RenderingServerGlobals::threaded = false; +RendererUtilities *RenderingServerGlobals::utilities = nullptr; RendererLightStorage *RenderingServerGlobals::light_storage = nullptr; RendererMaterialStorage *RenderingServerGlobals::material_storage = nullptr; RendererMeshStorage *RenderingServerGlobals::mesh_storage = nullptr; RendererParticlesStorage *RenderingServerGlobals::particles_storage = nullptr; RendererTextureStorage *RenderingServerGlobals::texture_storage = nullptr; RendererGI *RenderingServerGlobals::gi = nullptr; -RendererStorage *RenderingServerGlobals::storage = nullptr; +RendererFog *RenderingServerGlobals::fog = nullptr; RendererCanvasRender *RenderingServerGlobals::canvas_render = nullptr; RendererCompositor *RenderingServerGlobals::rasterizer = nullptr; diff --git a/servers/rendering/rendering_server_globals.h b/servers/rendering/rendering_server_globals.h index 91712f2a51..87d69984f8 100644 --- a/servers/rendering/rendering_server_globals.h +++ b/servers/rendering/rendering_server_globals.h @@ -31,6 +31,7 @@ #ifndef RENDERING_SERVER_GLOBALS_H #define RENDERING_SERVER_GLOBALS_H +#include "servers/rendering/environment/renderer_fog.h" #include "servers/rendering/environment/renderer_gi.h" #include "servers/rendering/renderer_canvas_cull.h" #include "servers/rendering/renderer_canvas_render.h" @@ -40,6 +41,7 @@ #include "servers/rendering/storage/mesh_storage.h" #include "servers/rendering/storage/particles_storage.h" #include "servers/rendering/storage/texture_storage.h" +#include "servers/rendering/storage/utilities.h" class RendererCanvasCull; class RendererViewport; @@ -49,13 +51,14 @@ class RenderingServerGlobals { public: static bool threaded; + static RendererUtilities *utilities; static RendererLightStorage *light_storage; static RendererMaterialStorage *material_storage; static RendererMeshStorage *mesh_storage; static RendererParticlesStorage *particles_storage; static RendererTextureStorage *texture_storage; static RendererGI *gi; - static RendererStorage *storage; + static RendererFog *fog; static RendererCanvasRender *canvas_render; static RendererCompositor *rasterizer; diff --git a/servers/rendering/storage/light_storage.h b/servers/rendering/storage/light_storage.h index 0cb0f35570..f627e46e52 100644 --- a/servers/rendering/storage/light_storage.h +++ b/servers/rendering/storage/light_storage.h @@ -31,7 +31,6 @@ #ifndef LIGHT_STORAGE_H #define LIGHT_STORAGE_H -#include "servers/rendering/renderer_storage.h" #include "servers/rendering_server.h" class RendererLightStorage { diff --git a/servers/rendering/storage/material_storage.h b/servers/rendering/storage/material_storage.h index f0363f129a..00790106af 100644 --- a/servers/rendering/storage/material_storage.h +++ b/servers/rendering/storage/material_storage.h @@ -31,8 +31,8 @@ #ifndef MATERIAL_STORAGE_H #define MATERIAL_STORAGE_H -#include "servers/rendering/renderer_storage.h" #include "servers/rendering_server.h" +#include "utilities.h" class RendererMaterialStorage { public: @@ -95,7 +95,7 @@ public: virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) = 0; - virtual void material_update_dependency(RID p_material, RendererStorage::DependencyTracker *p_instance) = 0; + virtual void material_update_dependency(RID p_material, DependencyTracker *p_instance) = 0; }; #endif // !MATERIAL_STORAGE_H diff --git a/servers/rendering/storage/mesh_storage.h b/servers/rendering/storage/mesh_storage.h index 1dac51319c..146f6fde40 100644 --- a/servers/rendering/storage/mesh_storage.h +++ b/servers/rendering/storage/mesh_storage.h @@ -31,8 +31,8 @@ #ifndef MESH_STORAGE_H #define MESH_STORAGE_H -#include "servers/rendering/renderer_storage.h" #include "servers/rendering_server.h" +#include "utilities.h" class RendererMeshStorage { public: @@ -130,7 +130,7 @@ public: virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const = 0; virtual void skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform) = 0; - virtual void skeleton_update_dependency(RID p_base, RendererStorage::DependencyTracker *p_instance) = 0; + virtual void skeleton_update_dependency(RID p_base, DependencyTracker *p_instance) = 0; }; #endif // !MESH_STORAGE_H diff --git a/servers/rendering/storage/particles_storage.h b/servers/rendering/storage/particles_storage.h index 268b5473e2..eba68210a5 100644 --- a/servers/rendering/storage/particles_storage.h +++ b/servers/rendering/storage/particles_storage.h @@ -31,7 +31,6 @@ #ifndef PARTICLES_STORAGE_H #define PARTICLES_STORAGE_H -#include "servers/rendering/renderer_storage.h" #include "servers/rendering_server.h" class RendererParticlesStorage { diff --git a/servers/rendering/storage/texture_storage.h b/servers/rendering/storage/texture_storage.h index e3a969d032..e90a028713 100644 --- a/servers/rendering/storage/texture_storage.h +++ b/servers/rendering/storage/texture_storage.h @@ -34,7 +34,18 @@ #include "servers/rendering_server.h" class RendererTextureStorage { +private: + Color default_clear_color; + public: + void set_default_clear_color(const Color &p_color) { + default_clear_color = p_color; + } + + Color get_default_clear_color() const { + return default_clear_color; + } + /* Canvas Texture API */ virtual RID canvas_texture_allocate() = 0; diff --git a/servers/rendering/renderer_storage.cpp b/servers/rendering/storage/utilities.cpp index 56409ae187..7cc6417a25 100644 --- a/servers/rendering/renderer_storage.cpp +++ b/servers/rendering/storage/utilities.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* renderer_storage.cpp */ +/* utilities.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,11 +28,9 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "renderer_storage.h" +#include "utilities.h" -RendererStorage *RendererStorage::base_singleton = nullptr; - -void RendererStorage::Dependency::changed_notify(DependencyChangedNotification p_notification) { +void Dependency::changed_notify(DependencyChangedNotification p_notification) { for (const KeyValue<DependencyTracker *, uint32_t> &E : instances) { if (E.key->changed_callback) { E.key->changed_callback(p_notification, E.key); @@ -40,7 +38,7 @@ void RendererStorage::Dependency::changed_notify(DependencyChangedNotification p } } -void RendererStorage::Dependency::deleted_notify(const RID &p_rid) { +void Dependency::deleted_notify(const RID &p_rid) { for (const KeyValue<DependencyTracker *, uint32_t> &E : instances) { if (E.key->deleted_callback) { E.key->deleted_callback(p_rid, E.key); @@ -52,7 +50,7 @@ void RendererStorage::Dependency::deleted_notify(const RID &p_rid) { instances.clear(); } -RendererStorage::Dependency::~Dependency() { +Dependency::~Dependency() { #ifdef DEBUG_ENABLED if (instances.size()) { WARN_PRINT("Leaked instance dependency: Bug - did not call instance_notify_deleted when freeing."); @@ -62,7 +60,3 @@ RendererStorage::Dependency::~Dependency() { } #endif } - -RendererStorage::RendererStorage() { - base_singleton = this; -} diff --git a/servers/rendering/renderer_storage.h b/servers/rendering/storage/utilities.h index 859950673e..4d7c34383c 100644 --- a/servers/rendering/renderer_storage.h +++ b/servers/rendering/storage/utilities.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* renderer_storage.h */ +/* utilities.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,14 +28,14 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef RENDERINGSERVERSTORAGE_H -#define RENDERINGSERVERSTORAGE_H +#ifndef RENDERER_UTILITIES_H +#define RENDERER_UTILITIES_H #include "servers/rendering_server.h" -class RendererStorage { - Color default_clear_color; +class DependencyTracker; +class Dependency { public: enum DependencyChangedNotification { DEPENDENCY_CHANGED_AABB, @@ -52,137 +52,113 @@ public: DEPENDENCY_CHANGED_REFLECTION_PROBE, }; - struct DependencyTracker; + void changed_notify(DependencyChangedNotification p_notification); + void deleted_notify(const RID &p_rid); - struct Dependency { - void changed_notify(DependencyChangedNotification p_notification); - void deleted_notify(const RID &p_rid); + ~Dependency(); - ~Dependency(); - - private: - friend struct DependencyTracker; - HashMap<DependencyTracker *, uint32_t> instances; - }; +private: + friend class DependencyTracker; + HashMap<DependencyTracker *, uint32_t> instances; +}; - struct DependencyTracker { - void *userdata = nullptr; - typedef void (*ChangedCallback)(DependencyChangedNotification, DependencyTracker *); - typedef void (*DeletedCallback)(const RID &, DependencyTracker *); +class DependencyTracker { +public: + void *userdata = nullptr; + typedef void (*ChangedCallback)(Dependency::DependencyChangedNotification, DependencyTracker *); + typedef void (*DeletedCallback)(const RID &, DependencyTracker *); - ChangedCallback changed_callback = nullptr; - DeletedCallback deleted_callback = nullptr; + ChangedCallback changed_callback = nullptr; + DeletedCallback deleted_callback = nullptr; - void update_begin() { // call before updating dependencies - instance_version++; - } + void update_begin() { // call before updating dependencies + instance_version++; + } - void update_dependency(Dependency *p_dependency) { //called internally, can't be used directly, use update functions in Storage - dependencies.insert(p_dependency); - p_dependency->instances[this] = instance_version; - } + void update_dependency(Dependency *p_dependency) { //called internally, can't be used directly, use update functions in Storage + dependencies.insert(p_dependency); + p_dependency->instances[this] = instance_version; + } - void update_end() { //call after updating dependencies - List<Pair<Dependency *, DependencyTracker *>> to_clean_up; - - for (Dependency *E : dependencies) { - Dependency *dep = E; - HashMap<DependencyTracker *, uint32_t>::Iterator F = dep->instances.find(this); - ERR_CONTINUE(!F); - if (F->value != instance_version) { - Pair<Dependency *, DependencyTracker *> p; - p.first = dep; - p.second = F->key; - to_clean_up.push_back(p); - } + void update_end() { //call after updating dependencies + List<Pair<Dependency *, DependencyTracker *>> to_clean_up; + + for (Dependency *E : dependencies) { + Dependency *dep = E; + HashMap<DependencyTracker *, uint32_t>::Iterator F = dep->instances.find(this); + ERR_CONTINUE(!F); + if (F->value != instance_version) { + Pair<Dependency *, DependencyTracker *> p; + p.first = dep; + p.second = F->key; + to_clean_up.push_back(p); } + } - while (to_clean_up.size()) { - to_clean_up.front()->get().first->instances.erase(to_clean_up.front()->get().second); - dependencies.erase(to_clean_up.front()->get().first); - to_clean_up.pop_front(); - } + while (to_clean_up.size()) { + to_clean_up.front()->get().first->instances.erase(to_clean_up.front()->get().second); + dependencies.erase(to_clean_up.front()->get().first); + to_clean_up.pop_front(); } + } - void clear() { // clear all dependencies - for (Dependency *E : dependencies) { - Dependency *dep = E; - dep->instances.erase(this); - } - dependencies.clear(); + void clear() { // clear all dependencies + for (Dependency *E : dependencies) { + Dependency *dep = E; + dep->instances.erase(this); } + dependencies.clear(); + } - ~DependencyTracker() { clear(); } + ~DependencyTracker() { clear(); } - private: - friend struct Dependency; - uint32_t instance_version = 0; - HashSet<Dependency *> dependencies; - }; +private: + friend class Dependency; + uint32_t instance_version = 0; + HashSet<Dependency *> dependencies; +}; - virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) = 0; +class RendererUtilities { +public: + virtual ~RendererUtilities() {} - /* FOG VOLUMES */ + /* INSTANCES */ - virtual RID fog_volume_allocate() = 0; - virtual void fog_volume_initialize(RID p_rid) = 0; + virtual RS::InstanceType get_base_type(RID p_rid) const = 0; + virtual bool free(RID p_rid) = 0; - virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) = 0; - virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) = 0; - virtual void fog_volume_set_material(RID p_fog_volume, RID p_material) = 0; - virtual AABB fog_volume_get_aabb(RID p_fog_volume) const = 0; - virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const = 0; + /* DEPENDENCIES */ + + virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) = 0; /* VISIBILITY NOTIFIER */ virtual RID visibility_notifier_allocate() = 0; virtual void visibility_notifier_initialize(RID p_notifier) = 0; + virtual void visibility_notifier_free(RID p_notifier) = 0; + virtual void visibility_notifier_set_aabb(RID p_notifier, const AABB &p_aabb) = 0; virtual void visibility_notifier_set_callbacks(RID p_notifier, const Callable &p_enter_callbable, const Callable &p_exit_callable) = 0; virtual AABB visibility_notifier_get_aabb(RID p_notifier) const = 0; virtual void visibility_notifier_call(RID p_notifier, bool p_enter, bool p_deferred) = 0; - virtual RS::InstanceType get_base_type(RID p_rid) const = 0; - virtual bool free(RID p_rid) = 0; - - virtual bool has_os_feature(const String &p_feature) const = 0; + /* TIMING */ - virtual void update_dirty_resources() = 0; - - virtual void set_debug_generate_wireframes(bool p_generate) = 0; - - virtual void update_memory_info() = 0; - - virtual uint64_t get_rendering_info(RS::RenderingInfo p_info) = 0; - virtual String get_video_adapter_name() const = 0; - virtual String get_video_adapter_vendor() const = 0; - virtual RenderingDevice::DeviceType get_video_adapter_type() const = 0; - virtual String get_video_adapter_api_version() const = 0; - - static RendererStorage *base_singleton; - - void set_default_clear_color(const Color &p_color) { - default_clear_color = p_color; - } + bool capturing_timestamps = false; - Color get_default_clear_color() const { - return default_clear_color; - } -#define TIMESTAMP_BEGIN() \ - { \ - if (RSG::storage->capturing_timestamps) \ - RSG::storage->capture_timestamps_begin(); \ +#define TIMESTAMP_BEGIN() \ + { \ + if (RSG::utilities->capturing_timestamps) \ + RSG::utilities->capture_timestamps_begin(); \ } -#define RENDER_TIMESTAMP(m_text) \ - { \ - if (RSG::storage->capturing_timestamps) \ - RSG::storage->capture_timestamp(m_text); \ +#define RENDER_TIMESTAMP(m_text) \ + { \ + if (RSG::utilities->capturing_timestamps) \ + RSG::utilities->capture_timestamp(m_text); \ } - bool capturing_timestamps = false; - virtual void capture_timestamps_begin() = 0; virtual void capture_timestamp(const String &p_name) = 0; virtual uint32_t get_captured_timestamps_count() const = 0; @@ -191,8 +167,20 @@ public: virtual uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const = 0; virtual String get_captured_timestamp_name(uint32_t p_index) const = 0; - RendererStorage(); - virtual ~RendererStorage() {} + /* MISC */ + + virtual void update_dirty_resources() = 0; + virtual void set_debug_generate_wireframes(bool p_generate) = 0; + + virtual bool has_os_feature(const String &p_feature) const = 0; + + virtual void update_memory_info() = 0; + + virtual uint64_t get_rendering_info(RS::RenderingInfo p_info) = 0; + virtual String get_video_adapter_name() const = 0; + virtual String get_video_adapter_vendor() const = 0; + virtual RenderingDevice::DeviceType get_video_adapter_type() const = 0; + virtual String get_video_adapter_api_version() const = 0; }; -#endif // RENDERINGSERVERSTORAGE_H +#endif // !RENDERER_UTILITIES_H diff --git a/servers/xr/xr_interface_extension.cpp b/servers/xr/xr_interface_extension.cpp index a0bec0f95b..1f3d07c357 100644 --- a/servers/xr/xr_interface_extension.cpp +++ b/servers/xr/xr_interface_extension.cpp @@ -29,9 +29,7 @@ /*************************************************************************/ #include "xr_interface_extension.h" -#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" -#include "servers/rendering/renderer_storage.h" #include "servers/rendering/rendering_server_globals.h" void XRInterfaceExtension::_bind_methods() { diff --git a/tests/core/math/test_plane.h b/tests/core/math/test_plane.h new file mode 100644 index 0000000000..d81a5af1ce --- /dev/null +++ b/tests/core/math/test_plane.h @@ -0,0 +1,172 @@ +/*************************************************************************/ +/* test_plane.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef TEST_PLANE_H +#define TEST_PLANE_H + +#include "core/math/plane.h" + +#include "thirdparty/doctest/doctest.h" + +namespace TestPlane { + +// Plane + +TEST_CASE("[Plane] Constructor methods") { + const Plane plane = Plane(32, 22, 16, 3); + const Plane plane_vector = Plane(Vector3(32, 22, 16), 3); + const Plane plane_copy_plane = Plane(plane); + + CHECK_MESSAGE( + plane == plane_vector, + "Planes created with same values but different methods should be equal."); + + CHECK_MESSAGE( + plane == plane_copy_plane, + "Planes created with same values but different methods should be equal."); +} + +TEST_CASE("[Plane] Basic getters") { + const Plane plane = Plane(32, 22, 16, 3); + const Plane plane_normalized = Plane(32.0 / 42, 22.0 / 42, 16.0 / 42, 3.0 / 42); + + CHECK_MESSAGE( + plane.get_normal().is_equal_approx(Vector3(32, 22, 16)), + "get_normal() should return the expected value."); + + CHECK_MESSAGE( + plane.normalized().is_equal_approx(plane_normalized), + "normalized() should return a copy of the normalized value."); +} + +TEST_CASE("[Plane] Basic setters") { + Plane plane = Plane(32, 22, 16, 3); + plane.set_normal(Vector3(4, 2, 3)); + + CHECK_MESSAGE( + plane.is_equal_approx(Plane(4, 2, 3, 3)), + "set_normal() should result in the expected plane."); + + plane = Plane(32, 22, 16, 3); + plane.normalize(); + + CHECK_MESSAGE( + plane.is_equal_approx(Plane(32.0 / 42, 22.0 / 42, 16.0 / 42, 3.0 / 42)), + "normalize() should result in the expected plane."); +} + +TEST_CASE("[Plane] Plane-point operations") { + const Plane plane = Plane(32, 22, 16, 3); + const Plane y_facing_plane = Plane(0, 1, 0, 4); + + CHECK_MESSAGE( + plane.center().is_equal_approx(Vector3(32 * 3, 22 * 3, 16 * 3)), + "center() should return a vector pointing to the center of the plane."); + + CHECK_MESSAGE( + y_facing_plane.is_point_over(Vector3(0, 5, 0)), + "is_point_over() should return the expected result."); + + CHECK_MESSAGE( + y_facing_plane.get_any_perpendicular_normal().is_equal_approx(Vector3(1, 0, 0)), + "get_any_perpindicular_normal() should return the expected result."); + + // TODO distance_to() +} + +TEST_CASE("[Plane] Has point") { + const Plane x_facing_plane = Plane(1, 0, 0, 0); + const Plane y_facing_plane = Plane(0, 1, 0, 0); + const Plane z_facing_plane = Plane(0, 0, 1, 0); + + const Vector3 x_axis_point = Vector3(10, 0, 0); + const Vector3 y_axis_point = Vector3(0, 10, 0); + const Vector3 z_axis_point = Vector3(0, 0, 10); + + const Plane x_facing_plane_with_d_offset = Plane(1, 0, 0, 1); + const Vector3 y_axis_point_with_d_offset = Vector3(1, 10, 0); + + CHECK_MESSAGE( + x_facing_plane.has_point(y_axis_point), + "has_point() with contained Vector3 should return the expected result."); + CHECK_MESSAGE( + x_facing_plane.has_point(z_axis_point), + "has_point() with contained Vector3 should return the expected result."); + + CHECK_MESSAGE( + y_facing_plane.has_point(x_axis_point), + "has_point() with contained Vector3 should return the expected result."); + CHECK_MESSAGE( + y_facing_plane.has_point(z_axis_point), + "has_point() with contained Vector3 should return the expected result."); + + CHECK_MESSAGE( + z_facing_plane.has_point(y_axis_point), + "has_point() with contained Vector3 should return the expected result."); + CHECK_MESSAGE( + z_facing_plane.has_point(x_axis_point), + "has_point() with contained Vector3 should return the expected result."); + + CHECK_MESSAGE( + x_facing_plane_with_d_offset.has_point(y_axis_point_with_d_offset), + "has_point() with passed Vector3 should return the expected result."); +} + +TEST_CASE("[Plane] Intersection") { + const Plane x_facing_plane = Plane(1, 0, 0, 1); + const Plane y_facing_plane = Plane(0, 1, 0, 2); + const Plane z_facing_plane = Plane(0, 0, 1, 3); + + Vector3 vec_out; + + CHECK_MESSAGE( + x_facing_plane.intersect_3(y_facing_plane, z_facing_plane, &vec_out), + "intersect_3() should return the expected result."); + CHECK_MESSAGE( + vec_out.is_equal_approx(Vector3(1, 2, 3)), + "intersect_3() should modify vec_out to the expected result."); + + CHECK_MESSAGE( + x_facing_plane.intersects_ray(Vector3(0, 1, 1), Vector3(2, 0, 0), &vec_out), + "intersects_ray() should return the expected result."); + CHECK_MESSAGE( + vec_out.is_equal_approx(Vector3(1, 1, 1)), + "intersects_ray() should modify vec_out to the expected result."); + + CHECK_MESSAGE( + x_facing_plane.intersects_segment(Vector3(0, 1, 1), Vector3(2, 1, 1), &vec_out), + "intersects_segment() should return the expected result."); + CHECK_MESSAGE( + vec_out.is_equal_approx(Vector3(1, 1, 1)), + "intersects_segment() should modify vec_out to the expected result."); +} +} // namespace TestPlane + +#endif // TEST_PLANE_H diff --git a/tests/core/object/test_class_db.h b/tests/core/object/test_class_db.h index 7ea9e16ff1..c7535426df 100644 --- a/tests/core/object/test_class_db.h +++ b/tests/core/object/test_class_db.h @@ -597,7 +597,7 @@ void add_exposed_classes(Context &r_context) { (exposed_class.name != r_context.names_cache.object_class || String(method.name) != "free"), warn_msg.utf8().get_data()); - } else if (return_info.type == Variant::INT && return_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + } else if (return_info.type == Variant::INT && return_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { method.return_type.name = return_info.class_name; method.return_type.is_enum = true; } else if (return_info.class_name != StringName()) { @@ -626,7 +626,7 @@ void add_exposed_classes(Context &r_context) { ArgumentData arg; arg.name = orig_arg_name; - if (arg_info.type == Variant::INT && arg_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (arg_info.type == Variant::INT && arg_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { arg.type.name = arg_info.class_name; arg.type.is_enum = true; } else if (arg_info.class_name != StringName()) { @@ -694,7 +694,7 @@ void add_exposed_classes(Context &r_context) { ArgumentData arg; arg.name = orig_arg_name; - if (arg_info.type == Variant::INT && arg_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { + if (arg_info.type == Variant::INT && arg_info.usage & (PROPERTY_USAGE_CLASS_IS_ENUM | PROPERTY_USAGE_CLASS_IS_BITFIELD)) { arg.type.name = arg_info.class_name; arg.type.is_enum = true; } else if (arg_info.class_name != StringName()) { @@ -732,13 +732,13 @@ void add_exposed_classes(Context &r_context) { List<String> constants; ClassDB::get_integer_constant_list(class_name, &constants, true); - const HashMap<StringName, List<StringName>> &enum_map = class_info->enum_map; + const HashMap<StringName, ClassDB::ClassInfo::EnumInfo> &enum_map = class_info->enum_map; - for (const KeyValue<StringName, List<StringName>> &K : enum_map) { + for (const KeyValue<StringName, ClassDB::ClassInfo::EnumInfo> &K : enum_map) { EnumData enum_; enum_.name = K.key; - for (const StringName &E : K.value) { + for (const StringName &E : K.value.constants) { const StringName &constant_name = E; TEST_FAIL_COND(String(constant_name).find("::") != -1, "Enum constant contains '::', check bindings to remove the scope: '", diff --git a/tests/test_main.cpp b/tests/test_main.cpp index ac0cdf0cc1..79cda7e512 100644 --- a/tests/test_main.cpp +++ b/tests/test_main.cpp @@ -45,6 +45,7 @@ #include "tests/core/math/test_expression.h" #include "tests/core/math/test_geometry_2d.h" #include "tests/core/math/test_geometry_3d.h" +#include "tests/core/math/test_plane.h" #include "tests/core/math/test_random_number_generator.h" #include "tests/core/math/test_rect2.h" #include "tests/core/math/test_rect2i.h" |