From e5807b2adfbe713a824a5f25d02da7bb5a628d01 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Fri, 6 Dec 2024 16:01:21 +0100 Subject: [PATCH 001/114] [Net] Fix TCP/UDP server network tests Some tests have been removed since there's no way to guarantee they will pass. Other tests have been refactored to ensure proper waiting, and taking into account potential out-of-order delivery (which is unlikely in test scenarios but expecting a specific order on a UDP socket is wrong and OSes makes no promises of ordered delivery on localhost). --- tests/core/io/test_tcp_server.h | 108 ++++++++++++------- tests/core/io/test_udp_server.h | 180 ++++++++++---------------------- 2 files changed, 123 insertions(+), 165 deletions(-) diff --git a/tests/core/io/test_tcp_server.h b/tests/core/io/test_tcp_server.h index 9bf1c2ecad5..24c27468cb8 100644 --- a/tests/core/io/test_tcp_server.h +++ b/tests/core/io/test_tcp_server.h @@ -35,12 +35,21 @@ #include "core/io/tcp_server.h" #include "tests/test_macros.h" +#include + namespace TestTCPServer { const int PORT = 12345; const IPAddress LOCALHOST("127.0.0.1"); const uint32_t SLEEP_DURATION = 1000; -const uint64_t MAX_WAIT_USEC = 100000; +const uint64_t MAX_WAIT_USEC = 2000000; + +void wait_for_condition(std::function f_test) { + const uint64_t time = OS::get_singleton()->get_ticks_usec(); + while (!f_test() && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { + OS::get_singleton()->delay_usec(SLEEP_DURATION); + } +} Ref create_server(const IPAddress &p_address, int p_port) { Ref server; @@ -66,11 +75,9 @@ Ref create_client(const IPAddress &p_address, int p_port) { } Ref accept_connection(Ref &p_server) { - // Required to get the connection properly established. - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - while (!p_server->is_connection_available() && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } + wait_for_condition([&]() { + return p_server->is_connection_available(); + }); REQUIRE(p_server->is_connection_available()); Ref client_from_server = p_server->take_connection(); @@ -81,16 +88,6 @@ Ref accept_connection(Ref &p_server) { return client_from_server; } -Error poll(Ref p_client) { - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - Error err = p_client->poll(); - while (err != Error::OK && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - OS::get_singleton()->delay_usec(SLEEP_DURATION); - err = p_client->poll(); - } - return err; -} - TEST_CASE("[TCPServer] Instantiation") { Ref server; server.instantiate(); @@ -104,7 +101,10 @@ TEST_CASE("[TCPServer] Accept a connection and receive/send data") { Ref client = create_client(LOCALHOST, PORT); Ref client_from_server = accept_connection(server); - REQUIRE_EQ(poll(client), Error::OK); + wait_for_condition([&]() { + return client->poll() != Error::OK || client->get_status() == StreamPeerTCP::STATUS_CONNECTED; + }); + CHECK_EQ(client->get_status(), StreamPeerTCP::STATUS_CONNECTED); // Sending data from client to server. @@ -135,9 +135,25 @@ TEST_CASE("[TCPServer] Handle multiple clients at the same time") { clients_from_server.push_back(accept_connection(server)); } - // Calling poll() to update client status. + wait_for_condition([&]() { + bool should_exit = true; + for (Ref &c : clients) { + if (c->poll() != Error::OK) { + return true; + } + StreamPeerTCP::Status status = c->get_status(); + if (status != StreamPeerTCP::STATUS_CONNECTED && status != StreamPeerTCP::STATUS_CONNECTING) { + return true; + } + if (status != StreamPeerTCP::STATUS_CONNECTED) { + should_exit = false; + } + } + return should_exit; + }); + for (Ref &c : clients) { - REQUIRE_EQ(poll(c), Error::OK); + REQUIRE_EQ(c->get_status(), StreamPeerTCP::STATUS_CONNECTED); } // Sending data from each client to server. @@ -158,7 +174,10 @@ TEST_CASE("[TCPServer] When stopped shouldn't accept new connections") { Ref client = create_client(LOCALHOST, PORT); Ref client_from_server = accept_connection(server); - REQUIRE_EQ(poll(client), Error::OK); + wait_for_condition([&]() { + return client->poll() != Error::OK || client->get_status() == StreamPeerTCP::STATUS_CONNECTED; + }); + CHECK_EQ(client->get_status(), StreamPeerTCP::STATUS_CONNECTED); // Sending data from client to server. @@ -170,27 +189,26 @@ TEST_CASE("[TCPServer] When stopped shouldn't accept new connections") { server->stop(); CHECK_FALSE(server->is_listening()); + // Make sure the client times out in less than the wait time. + int timeout = ProjectSettings::get_singleton()->get_setting("network/limits/tcp/connect_timeout_seconds"); + ProjectSettings::get_singleton()->set_setting("network/limits/tcp/connect_timeout_seconds", 1); + Ref new_client = create_client(LOCALHOST, PORT); - // Required to get the connection properly established. - uint64_t time = OS::get_singleton()->get_ticks_usec(); - while (!server->is_connection_available() && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } + // Reset the timeout setting. + ProjectSettings::get_singleton()->set_setting("network/limits/tcp/connect_timeout_seconds", timeout); CHECK_FALSE(server->is_connection_available()); - time = OS::get_singleton()->get_ticks_usec(); - Error err = new_client->poll(); - while (err != Error::OK && err != Error::ERR_CONNECTION_ERROR && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - OS::get_singleton()->delay_usec(SLEEP_DURATION); - err = new_client->poll(); - } - REQUIRE((err == Error::OK || err == Error::ERR_CONNECTION_ERROR)); - StreamPeerTCP::Status status = new_client->get_status(); - CHECK((status == StreamPeerTCP::STATUS_CONNECTING || status == StreamPeerTCP::STATUS_ERROR)); + wait_for_condition([&]() { + return new_client->poll() != Error::OK || new_client->get_status() == StreamPeerTCP::STATUS_ERROR; + }); + CHECK_FALSE(server->is_connection_available()); + + CHECK_EQ(new_client->get_status(), StreamPeerTCP::STATUS_ERROR); new_client->disconnect_from_host(); + CHECK_EQ(new_client->get_status(), StreamPeerTCP::STATUS_NONE); } TEST_CASE("[TCPServer] Should disconnect client") { @@ -198,7 +216,10 @@ TEST_CASE("[TCPServer] Should disconnect client") { Ref client = create_client(LOCALHOST, PORT); Ref client_from_server = accept_connection(server); - REQUIRE_EQ(poll(client), Error::OK); + wait_for_condition([&]() { + return client->poll() != Error::OK || client->get_status() == StreamPeerTCP::STATUS_CONNECTED; + }); + CHECK_EQ(client->get_status(), StreamPeerTCP::STATUS_CONNECTED); // Sending data from client to server. @@ -210,12 +231,23 @@ TEST_CASE("[TCPServer] Should disconnect client") { server->stop(); CHECK_FALSE(server->is_listening()); - // Reading for a closed connection will print an error. + // Wait for disconnection + wait_for_condition([&]() { + return client->poll() != Error::OK || client->get_status() == StreamPeerTCP::STATUS_NONE; + }); + + // Wait for disconnection + wait_for_condition([&]() { + return client_from_server->poll() != Error::OK || client_from_server->get_status() == StreamPeerTCP::STATUS_NONE; + }); + + CHECK_EQ(client->get_status(), StreamPeerTCP::STATUS_NONE); + CHECK_EQ(client_from_server->get_status(), StreamPeerTCP::STATUS_NONE); + ERR_PRINT_OFF; CHECK_EQ(client->get_string(), String()); + CHECK_EQ(client_from_server->get_string(), String()); ERR_PRINT_ON; - REQUIRE_EQ(poll(client), Error::OK); - CHECK_EQ(client->get_status(), StreamPeerTCP::STATUS_NONE); } } // namespace TestTCPServer diff --git a/tests/core/io/test_udp_server.h b/tests/core/io/test_udp_server.h index 4ba385a0639..c65b8cacb24 100644 --- a/tests/core/io/test_udp_server.h +++ b/tests/core/io/test_udp_server.h @@ -42,6 +42,13 @@ const IPAddress LOCALHOST("127.0.0.1"); const uint32_t SLEEP_DURATION = 1000; const uint64_t MAX_WAIT_USEC = 100000; +void wait_for_condition(std::function f_test) { + const uint64_t time = OS::get_singleton()->get_ticks_usec(); + while (!f_test() && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { + OS::get_singleton()->delay_usec(SLEEP_DURATION); + } +} + Ref create_server(const IPAddress &p_address, int p_port) { Ref server; server.instantiate(); @@ -68,12 +75,9 @@ Ref create_client(const IPAddress &p_address, int p_port) { } Ref accept_connection(Ref &p_server) { - // Required to get the connection properly established. - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - while (!p_server->is_connection_available() && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - p_server->poll(); - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } + wait_for_condition([&]() { + return p_server->poll() != Error::OK || p_server->is_connection_available(); + }); CHECK_EQ(p_server->poll(), Error::OK); REQUIRE(p_server->is_connection_available()); @@ -85,16 +89,6 @@ Ref accept_connection(Ref &p_server) { return client_from_server; } -Error poll(Ref p_server, Error p_err) { - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - Error err = p_server->poll(); - while (err != p_err && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - err = p_server->poll(); - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } - return err; -} - TEST_CASE("[UDPServer] Instantiation") { Ref server; server.instantiate(); @@ -120,14 +114,10 @@ TEST_CASE("[UDPServer] Accept a connection and receive/send data") { const Variant pi = 3.1415; CHECK_EQ(client_from_server->put_var(pi), Error::OK); - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - // get_available_packet_count() is the recommended way to call _poll(), because there is no public poll(). - while (client->get_available_packet_count() == 0 && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - server->poll(); - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } + wait_for_condition([&]() { + return client->get_available_packet_count() > 0; + }); - CHECK_EQ(server->poll(), Error::OK); CHECK_GT(client->get_available_packet_count(), 0); Variant pi_received; @@ -147,41 +137,55 @@ TEST_CASE("[UDPServer] Handle multiple clients at the same time") { Ref c = create_client(LOCALHOST, PORT); // Sending data from client to server. - const String hello_client = "Hello " + itos(i); + const String hello_client = itos(i); CHECK_EQ(c->put_var(hello_client), Error::OK); clients.push_back(c); } + Array packets; for (int i = 0; i < clients.size(); i++) { Ref cfs = accept_connection(server); - Variant hello_world_received; - CHECK_EQ(cfs->get_var(hello_world_received), Error::OK); - CHECK_EQ(String(hello_world_received), "Hello " + itos(i)); + Variant received_var; + CHECK_EQ(cfs->get_var(received_var), Error::OK); + CHECK_EQ(received_var.get_type(), Variant::STRING); + packets.push_back(received_var); // Sending data from server to client. - const Variant pi = 3.1415 + i; - CHECK_EQ(cfs->put_var(pi), Error::OK); + const float sent_float = 3.1415 + received_var.operator String().to_float(); + CHECK_EQ(cfs->put_var(sent_float), Error::OK); } - const uint64_t time = OS::get_singleton()->get_ticks_usec(); + CHECK_EQ(packets.size(), clients.size()); + + packets.sort(); for (int i = 0; i < clients.size(); i++) { - Ref c = clients[i]; - // get_available_packet_count() is the recommended way to call _poll(), because there is no public poll(). - // Because `time` is defined outside the for, we will wait the max amount of time only for the first client. - while (c->get_available_packet_count() == 0 && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - server->poll(); - OS::get_singleton()->delay_usec(SLEEP_DURATION); + CHECK_EQ(packets[i].operator String(), itos(i)); + } + + wait_for_condition([&]() { + bool should_exit = true; + for (Ref &c : clients) { + int count = c->get_available_packet_count(); + if (count < 0) { + return true; + } + if (count == 0) { + should_exit = false; + } } + return should_exit; + }); - // The recommended way to call _poll(), because there is no public poll(). - CHECK_GT(c->get_available_packet_count(), 0); + for (int i = 0; i < clients.size(); i++) { + CHECK_GT(clients[i]->get_available_packet_count(), 0); - Variant pi_received; - const Variant pi = 3.1415 + i; - CHECK_EQ(c->get_var(pi_received), Error::OK); - CHECK_EQ(pi_received, pi); + Variant received_var; + const float expected = 3.1415 + i; + CHECK_EQ(clients[i]->get_var(received_var), Error::OK); + CHECK_EQ(received_var.get_type(), Variant::FLOAT); + CHECK_EQ(received_var.operator float(), expected); } for (Ref &c : clients) { @@ -190,7 +194,7 @@ TEST_CASE("[UDPServer] Handle multiple clients at the same time") { server->stop(); } -TEST_CASE("[UDPServer] When stopped shouldn't accept new connections") { +TEST_CASE("[UDPServer] Should not accept new connections after stop") { Ref server = create_server(LOCALHOST, PORT); Ref client = create_client(LOCALHOST, PORT); @@ -198,94 +202,16 @@ TEST_CASE("[UDPServer] When stopped shouldn't accept new connections") { const String hello_world = "Hello World!"; CHECK_EQ(client->put_var(hello_world), Error::OK); - Variant hello_world_received; - Ref client_from_server = accept_connection(server); - CHECK_EQ(client_from_server->get_var(hello_world_received), Error::OK); - CHECK_EQ(String(hello_world_received), hello_world); - - client->close(); - server->stop(); - CHECK_FALSE(server->is_listening()); - - Ref new_client = create_client(LOCALHOST, PORT); - CHECK_EQ(new_client->put_var(hello_world), Error::OK); - - REQUIRE_EQ(poll(server, Error::ERR_UNCONFIGURED), Error::ERR_UNCONFIGURED); - CHECK_FALSE(server->is_connection_available()); - - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - // get_available_packet_count() is the recommended way to call _poll(), because there is no public poll(). - while (new_client->get_available_packet_count() == 0 && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } - - const int packet_count = new_client->get_available_packet_count(); - CHECK((packet_count == 0 || packet_count == -1)); -} - -TEST_CASE("[UDPServer] Should disconnect client") { - Ref server = create_server(LOCALHOST, PORT); - Ref client = create_client(LOCALHOST, PORT); - - // Sending data from client to server. - const String hello_world = "Hello World!"; - CHECK_EQ(client->put_var(hello_world), Error::OK); + wait_for_condition([&]() { + return server->poll() != Error::OK || server->is_connection_available(); + }); - Variant hello_world_received; - Ref client_from_server = accept_connection(server); - CHECK_EQ(client_from_server->get_var(hello_world_received), Error::OK); - CHECK_EQ(String(hello_world_received), hello_world); + REQUIRE(server->is_connection_available()); server->stop(); - CHECK_FALSE(server->is_listening()); - CHECK_FALSE(client_from_server->is_bound()); - CHECK_FALSE(client_from_server->is_socket_connected()); - // Sending data from client to server. - CHECK_EQ(client->put_var(hello_world), Error::OK); - - const uint64_t time = OS::get_singleton()->get_ticks_usec(); - // get_available_packet_count() is the recommended way to call _poll(), because there is no public poll(). - while (client->get_available_packet_count() == 0 && (OS::get_singleton()->get_ticks_usec() - time) < MAX_WAIT_USEC) { - OS::get_singleton()->delay_usec(SLEEP_DURATION); - } - - const int packet_count = client->get_available_packet_count(); - CHECK((packet_count == 0 || packet_count == -1)); - - client->close(); -} - -TEST_CASE("[UDPServer] Should drop new connections when pending max connection is reached") { - Ref server = create_server(LOCALHOST, PORT); - server->set_max_pending_connections(3); - - Vector> clients; - for (int i = 0; i < 5; i++) { - Ref c = create_client(LOCALHOST, PORT); - - // Sending data from client to server. - const String hello_client = "Hello " + itos(i); - CHECK_EQ(c->put_var(hello_client), Error::OK); - - clients.push_back(c); - } - - for (int i = 0; i < server->get_max_pending_connections(); i++) { - Ref cfs = accept_connection(server); - - Variant hello_world_received; - CHECK_EQ(cfs->get_var(hello_world_received), Error::OK); - CHECK_EQ(String(hello_world_received), "Hello " + itos(i)); - } - - CHECK_EQ(poll(server, Error::OK), Error::OK); - - REQUIRE_FALSE(server->is_connection_available()); - Ref client_from_server = server->take_connection(); - REQUIRE_FALSE_MESSAGE(client_from_server.is_valid(), "A Packet Peer UDP from the UDP Server should be a null pointer because the pending connection was dropped."); - - server->stop(); + CHECK_FALSE(server->is_listening()); + CHECK_FALSE(server->is_connection_available()); } } // namespace TestUDPServer From 198dd40254970e223f84947611a207fbfd8a1d93 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 30 Dec 2024 17:23:48 +0100 Subject: [PATCH 002/114] [Web] Clarify JavaScriptBridge callback requirements Clarify that the callback must take **exactly one array argument**. --- doc/classes/JavaScriptBridge.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/classes/JavaScriptBridge.xml b/doc/classes/JavaScriptBridge.xml index ea3ede8857d..3662835b14a 100644 --- a/doc/classes/JavaScriptBridge.xml +++ b/doc/classes/JavaScriptBridge.xml @@ -16,6 +16,7 @@ Creates a reference to a [Callable] that can be used as a callback by JavaScript. The reference must be kept until the callback happens, or it won't be called at all. See [JavaScriptObject] for usage. + [b]Note:[/b] The callback function must take exactly one [Array] argument, which is going to be the JavaScript [url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments]arguments object[/url] converted to an array. From b0845da37d1893027e7e049894e844c9748f6a29 Mon Sep 17 00:00:00 2001 From: Synzorasize Date: Sun, 29 Dec 2024 20:30:57 -0600 Subject: [PATCH 003/114] Fix parsing Resource type as value type of a Dictionary --- core/variant/variant_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/variant/variant_parser.cpp b/core/variant/variant_parser.cpp index 2cae430bfbc..a53da4eabcb 100644 --- a/core/variant/variant_parser.cpp +++ b/core/variant/variant_parser.cpp @@ -1223,7 +1223,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream, r_err_str = String(); value_type = Variant::OBJECT; value_class_name = token.value; - got_comma_token = true; + got_bracket_token = true; } else { return err; } From 01b4fd352208f44307e155265c544f28bd99e44b Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Thu, 16 Jan 2025 05:57:29 +1100 Subject: [PATCH 004/114] Metal: enable GPU buffer address support --- drivers/metal/metal_device_properties.h | 1 + drivers/metal/metal_device_properties.mm | 4 ++++ drivers/metal/metal_objects.h | 3 +-- drivers/metal/rendering_device_driver_metal.mm | 17 ++++++++--------- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/metal/metal_device_properties.h b/drivers/metal/metal_device_properties.h index 815af367648..853ddcaebc5 100644 --- a/drivers/metal/metal_device_properties.h +++ b/drivers/metal/metal_device_properties.h @@ -93,6 +93,7 @@ struct API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)) MetalFeatures { bool needs_arg_encoders = true; bool metal_fx_spatial = false; /**< If true, Metal FX spatial functions are supported. */ bool metal_fx_temporal = false; /**< If true, Metal FX temporal functions are supported. */ + bool supports_gpu_address = false; /**< If true, referencing a GPU address in a shader is supported. */ }; struct MetalLimits { diff --git a/drivers/metal/metal_device_properties.mm b/drivers/metal/metal_device_properties.mm index d4d6d6bcd32..21553f7173d 100644 --- a/drivers/metal/metal_device_properties.mm +++ b/drivers/metal/metal_device_properties.mm @@ -99,6 +99,10 @@ features.supports32BitMSAA = p_device.supports32BitMSAA; } + if (@available(macOS 13.0, iOS 16.0, tvOS 16.0, *)) { + features.supports_gpu_address = true; + } + features.hostMemoryPageSize = sysconf(_SC_PAGESIZE); for (SampleCount sc = SampleCount1; sc <= SampleCount64; sc <<= 1) { diff --git a/drivers/metal/metal_objects.h b/drivers/metal/metal_objects.h index 4dc9b6d3f3d..67bb15a30fb 100644 --- a/drivers/metal/metal_objects.h +++ b/drivers/metal/metal_objects.h @@ -65,7 +65,6 @@ #import #import #import -#import // These types can be used in Vector and other containers that use // pointer operations not supported by ARC. @@ -563,7 +562,7 @@ struct API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)) BindingInfo { MTLBindingAccess access = MTLBindingAccessReadOnly; MTLResourceUsage usage = 0; MTLTextureType textureType = MTLTextureType2D; - spv::ImageFormat imageFormat = spv::ImageFormatUnknown; + int imageFormat = 0; uint32_t arrayLength = 0; bool isMultisampled = false; diff --git a/drivers/metal/rendering_device_driver_metal.mm b/drivers/metal/rendering_device_driver_metal.mm index 2e32e99c2eb..d66064249ac 100644 --- a/drivers/metal/rendering_device_driver_metal.mm +++ b/drivers/metal/rendering_device_driver_metal.mm @@ -164,6 +164,9 @@ _FORCE_INLINE_ MTLSize mipmapLevelSizeFromSize(MTLSize p_size, NSUInteger p_leve id obj = rid::get(p_buffer); return obj.gpuAddress; } else { +#if DEV_ENABLED + WARN_PRINT_ONCE("buffer_get_device_address is not supported on this OS version."); +#endif return 0; } } @@ -355,7 +358,7 @@ _FORCE_INLINE_ MTLSize mipmapLevelSizeFromSize(MTLSize p_size, NSUInteger p_leve // Check if it is a linear format for atomic operations and therefore needs a buffer, // as generally Metal does not support atomic operations on textures. - bool needs_buffer = is_linear || (p_format.array_layers == 1 && p_format.mipmaps == 1 && p_format.texture_type == TEXTURE_TYPE_2D && flags::any(p_format.usage_bits, TEXTURE_USAGE_STORAGE_BIT) && (p_format.format == DATA_FORMAT_R32_UINT || p_format.format == DATA_FORMAT_R32_SINT)); + bool needs_buffer = is_linear || (p_format.array_layers == 1 && p_format.mipmaps == 1 && p_format.texture_type == TEXTURE_TYPE_2D && flags::any(p_format.usage_bits, TEXTURE_USAGE_STORAGE_BIT) && (p_format.format == DATA_FORMAT_R32_UINT || p_format.format == DATA_FORMAT_R32_SINT || p_format.format == DATA_FORMAT_R32G32_UINT || p_format.format == DATA_FORMAT_R32G32_SINT)); id obj = nil; if (needs_buffer) { @@ -2033,10 +2036,6 @@ void deserialize(BufReader &p_reader) { CompilerMSL::Options msl_options{}; msl_options.set_msl_version(version_major, version_minor); - if (version_major == 3 && version_minor >= 1) { - // TODO(sgc): Restrict to Metal 3.0 for now, until bugs in SPIRV-cross image atomics are resolved. - msl_options.set_msl_version(3, 0); - } bin_data.msl_version = msl_options.msl_version; #if TARGET_OS_OSX msl_options.platform = CompilerMSL::Options::macOS; @@ -2063,9 +2062,9 @@ void deserialize(BufReader &p_reader) { msl_options.argument_buffers = false; bin_data.set_uses_argument_buffers(false); } - - msl_options.force_active_argument_buffer_resources = true; // Same as MoltenVK when using argument buffers. - // msl_options.pad_argument_buffer_resources = true; // Same as MoltenVK when using argument buffers. + msl_options.force_active_argument_buffer_resources = true; + // We can't use this, as we have to add the descriptor sets via compiler.add_msl_resource_binding. + // msl_options.pad_argument_buffer_resources = true; msl_options.texture_buffer_native = true; // Enable texture buffer support. msl_options.use_framebuffer_fetch_subpasses = false; msl_options.pad_fragment_output_components = true; @@ -4036,7 +4035,7 @@ bool isArrayTexture(MTLTextureType p_type) { case SUPPORTS_FRAGMENT_SHADER_WITH_ONLY_SIDE_EFFECTS: return true; case SUPPORTS_BUFFER_DEVICE_ADDRESS: - return false; + return device_properties->features.supports_gpu_address; case SUPPORTS_METALFX_SPATIAL: return device_properties->features.metal_fx_spatial; case SUPPORTS_METALFX_TEMPORAL: From 860a6ab9ac57056a11cb913aef9eff75e85810f6 Mon Sep 17 00:00:00 2001 From: yesfish Date: Thu, 16 Jan 2025 16:07:25 +0000 Subject: [PATCH 005/114] fix source_color default value --- .../storage_rd/material_storage.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp index 25adf0c9db3..b88005c13b8 100644 --- a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp @@ -344,7 +344,7 @@ static void _fill_std140_variant_ubo_value(ShaderLanguage::DataType type, int p_ } } -_FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, const Vector &value, uint8_t *data) { +_FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, const Vector &value, uint8_t *data, bool p_use_linear_color) { switch (type) { case ShaderLanguage::TYPE_BOOL: { uint32_t *gui = (uint32_t *)data; @@ -441,18 +441,28 @@ _FORCE_INLINE_ static void _fill_std140_ubo_value(ShaderLanguage::DataType type, } break; case ShaderLanguage::TYPE_VEC3: { + Color c = Color(value[0].real, value[1].real, value[2].real); + if (p_use_linear_color) { + c = c.srgb_to_linear(); + } + float *gui = reinterpret_cast(data); for (int i = 0; i < 3; i++) { - gui[i] = value[i].real; + gui[i] = c.components[i]; } } break; case ShaderLanguage::TYPE_VEC4: { + Color c = Color(value[0].real, value[1].real, value[2].real, value[3].real); + if (p_use_linear_color) { + c = c.srgb_to_linear(); + } + float *gui = reinterpret_cast(data); for (int i = 0; i < 4; i++) { - gui[i] = value[i].real; + gui[i] = c.components[i]; } } break; case ShaderLanguage::TYPE_MAT2: { @@ -786,7 +796,7 @@ void MaterialStorage::MaterialData::update_uniform_buffer(const HashMap Date: Sun, 29 Dec 2024 16:58:47 +0100 Subject: [PATCH 006/114] Prevent tooltip from showing when hovering past end of script line --- doc/classes/TextEdit.xml | 7 +++++-- .../4.3-stable.expected | 7 +++++++ scene/gui/code_edit.cpp | 10 +++++----- scene/gui/text_edit.compat.inc | 5 +++++ scene/gui/text_edit.cpp | 20 +++++++++++++------ scene/gui/text_edit.h | 3 ++- 6 files changed, 38 insertions(+), 14 deletions(-) diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index 89e2a2017af..826a491888d 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -349,9 +349,12 @@ - + + - Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line. If [param allow_out_of_bounds] is [code]false[/code] and the position is not over the text, both vector values will be set to [code]-1[/code]. + Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column and [code]y[/code] is the line. + If [param clamp_line] is [code]false[/code] and [param position] is below the last line, [code]Vector2i(-1, -1)[/code] is returned. + If [param clamp_column] is [code]false[/code] and [param position] is outside the column range of the line, [code]Vector2i(-1, -1)[/code] is returned. diff --git a/misc/extension_api_validation/4.3-stable.expected b/misc/extension_api_validation/4.3-stable.expected index 7b5889f464b..9c96811f875 100644 --- a/misc/extension_api_validation/4.3-stable.expected +++ b/misc/extension_api_validation/4.3-stable.expected @@ -309,3 +309,10 @@ Validate extension JSON: API was removed: classes/EditorSceneFormatImporter/meth This virtual method, and the internal public `get_import_flags`, were never used by the engine, since it was open sourced. So we're removing it despite the compat breakage as there's no way for users to rely on this affecting engine behavior. + + +GH-100913 +--------- +Validate extension JSON: Error: Field 'classes/TextEdit/methods/get_line_column_at_pos/arguments': size changed value in new API, from 2 to 3. + +Added optional argument to disallow positions that are outside the column range of the line. Compatibility method registered. diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index 7f8b4dca786..be8b6f075d9 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -421,7 +421,7 @@ void CodeEdit::gui_input(const Ref &p_gui_input) { mpos.x = get_size().x - mpos.x; } - Point2i pos = get_line_column_at_pos(mpos, false); + Point2i pos = get_line_column_at_pos(mpos, false, false); int line = pos.y; int col = pos.x; @@ -443,18 +443,18 @@ void CodeEdit::gui_input(const Ref &p_gui_input) { if (symbol_lookup_on_click_enabled) { if (mm->is_command_or_control_pressed() && mm->get_button_mask().is_empty()) { - symbol_lookup_pos = get_line_column_at_pos(mpos); + symbol_lookup_pos = get_line_column_at_pos(mpos, false, false); symbol_lookup_new_word = get_word_at_pos(mpos); if (symbol_lookup_new_word != symbol_lookup_word) { emit_signal(SNAME("symbol_validate"), symbol_lookup_new_word); } - } else if (!mm->is_command_or_control_pressed() || (!mm->get_button_mask().is_empty() && symbol_lookup_pos != get_line_column_at_pos(mpos))) { + } else if (!mm->is_command_or_control_pressed() || (!mm->get_button_mask().is_empty() && symbol_lookup_pos != get_line_column_at_pos(mpos, false, false))) { set_symbol_lookup_word_as_valid(false); } } if (symbol_tooltip_on_hover_enabled) { - symbol_tooltip_pos = get_line_column_at_pos(mpos, false); + symbol_tooltip_pos = get_line_column_at_pos(mpos, false, false); symbol_tooltip_word = get_word_at_pos(mpos); symbol_tooltip_timer->start(); } @@ -2388,7 +2388,7 @@ bool CodeEdit::is_symbol_lookup_on_click_enabled() const { String CodeEdit::get_text_for_symbol_lookup() const { Point2i mp = get_local_mouse_pos(); - Point2i pos = get_line_column_at_pos(mp, false); + Point2i pos = get_line_column_at_pos(mp, false, false); int line = pos.y; int col = pos.x; diff --git a/scene/gui/text_edit.compat.inc b/scene/gui/text_edit.compat.inc index bf73229868e..d15740390e9 100644 --- a/scene/gui/text_edit.compat.inc +++ b/scene/gui/text_edit.compat.inc @@ -34,8 +34,13 @@ void TextEdit::_set_selection_mode_compat_86978(SelectionMode p_mode, int p_line set_selection_mode(p_mode); } +Point2i TextEdit::_get_line_column_at_pos_bind_compat_100913(const Point2i &p_pos, bool p_allow_out_of_bounds) const { + return get_line_column_at_pos(p_pos, p_allow_out_of_bounds, true); +} + void TextEdit::_bind_compatibility_methods() { ClassDB::bind_compatibility_method(D_METHOD("set_selection_mode", "mode", "line", "column", "caret_index"), &TextEdit::_set_selection_mode_compat_86978, DEFVAL(-1), DEFVAL(-1), DEFVAL(0)); + ClassDB::bind_compatibility_method(D_METHOD("get_line_column_at_pos", "position", "allow_out_of_bounds"), &TextEdit::_get_line_column_at_pos_bind_compat_100913, DEFVAL(true)); } #endif diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index addbff1e979..b707a5a9334 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -4397,9 +4397,12 @@ Point2 TextEdit::get_local_mouse_pos() const { } String TextEdit::get_word_at_pos(const Vector2 &p_pos) const { - Point2i pos = get_line_column_at_pos(p_pos); + Point2i pos = get_line_column_at_pos(p_pos, false, false); int row = pos.y; int col = pos.x; + if (row < 0 || col < 0) { + return ""; + } String s = text[row]; if (s.length() == 0) { @@ -4435,7 +4438,7 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const { return String(); } -Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds) const { +Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_clamp_line, bool p_clamp_column) const { float rows = p_pos.y - theme_cache.style_normal->get_margin(SIDE_TOP); if (!editable) { rows -= theme_cache.style_readonly->get_offset().y / 2; @@ -4462,10 +4465,10 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_ int visible_lines = get_visible_line_count_in_range(first_vis_line, row); if (rows > visible_lines) { - if (!p_allow_out_of_bounds) { - return Point2i(-1, -1); + if (p_clamp_line) { + return Point2i(text[row].length(), row); } - return Point2i(text[row].length(), row); + return Point2i(-1, -1); } int colx = p_pos.x - (theme_cache.style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding); @@ -4482,6 +4485,11 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_ } else { colx -= wrap_indent; } + + if (!p_clamp_column && (colx < 0 || colx > TS->shaped_text_get_size(text_rid).x)) { + return Point2i(-1, -1); + } + int col = TS->shaped_text_hit_test_position(text_rid, colx); if (!caret_mid_grapheme_enabled) { col = TS->shaped_text_closest_character_pos(text_rid, col); @@ -6740,7 +6748,7 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_word_at_pos", "position"), &TextEdit::get_word_at_pos); - ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position", "allow_out_of_bounds"), &TextEdit::get_line_column_at_pos, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position", "clamp_line", "clamp_column"), &TextEdit::get_line_column_at_pos, DEFVAL(true), DEFVAL(true)); ClassDB::bind_method(D_METHOD("get_pos_at_line_column", "line", "column"), &TextEdit::get_pos_at_line_column); ClassDB::bind_method(D_METHOD("get_rect_at_line_column", "line", "column"), &TextEdit::get_rect_at_line_column); diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index ef511096302..8609b86eccf 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -658,6 +658,7 @@ class TextEdit : public Control { #ifndef DISABLE_DEPRECATED void _set_selection_mode_compat_86978(SelectionMode p_mode, int p_line = -1, int p_column = -1, int p_caret = 0); + Point2i _get_line_column_at_pos_bind_compat_100913(const Point2i &p_pos, bool p_allow_out_of_bounds = true) const; static void _bind_compatibility_methods(); #endif // DISABLE_DEPRECATED @@ -860,7 +861,7 @@ class TextEdit : public Control { String get_word_at_pos(const Vector2 &p_pos) const; - Point2i get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds = true) const; + Point2i get_line_column_at_pos(const Point2i &p_pos, bool p_clamp_line = true, bool p_clamp_column = true) const; Point2i get_pos_at_line_column(int p_line, int p_column) const; Rect2i get_rect_at_line_column(int p_line, int p_column) const; From d65c07da4c26efae605d67c31eb3e941332a216f Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Sat, 18 Jan 2025 14:56:18 +0200 Subject: [PATCH 007/114] [Windows] Override key codes with Unicode values for OEM keys only. --- platform/windows/display_server_windows.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index f35624d890a..3928f55a71e 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -5838,7 +5838,9 @@ void DisplayServerWindows::_process_key_events() { Ref k; k.instantiate(); - Key keycode = KeyMappingWindows::get_keysym(MapVirtualKey((ke.lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK)); + UINT vk = MapVirtualKey((ke.lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK); + bool is_oem = (vk >= 0xB8) && (vk <= 0xE6); + Key keycode = KeyMappingWindows::get_keysym(vk); Key key_label = keycode; Key physical_keycode = KeyMappingWindows::get_scansym((ke.lParam >> 16) & 0xFF, ke.lParam & (1 << 24)); @@ -5851,7 +5853,7 @@ void DisplayServerWindows::_process_key_events() { if (!keysym.is_empty()) { char32_t unicode_value = keysym[0]; // For printable ASCII characters (0x20-0x7E), override the original keycode with the character value. - if (Key::SPACE <= (Key)unicode_value && (Key)unicode_value <= Key::ASCIITILDE) { + if (is_oem && Key::SPACE <= (Key)unicode_value && (Key)unicode_value <= Key::ASCIITILDE) { keycode = fix_keycode(unicode_value, (Key)unicode_value); } key_label = fix_key_label(unicode_value, keycode); @@ -5894,6 +5896,7 @@ void DisplayServerWindows::_process_key_events() { k->set_window_id(ke.window_id); k->set_pressed(ke.uMsg == WM_KEYDOWN); + bool is_oem = (ke.wParam >= 0xB8) && (ke.wParam <= 0xE6); Key keycode = KeyMappingWindows::get_keysym(ke.wParam); if ((ke.lParam & (1 << 24)) && (ke.wParam == VK_RETURN)) { // Special case for Numpad Enter key. @@ -5912,7 +5915,7 @@ void DisplayServerWindows::_process_key_events() { if (!keysym.is_empty()) { char32_t unicode_value = keysym[0]; // For printable ASCII characters (0x20-0x7E), override the original keycode with the character value. - if (Key::SPACE <= (Key)unicode_value && (Key)unicode_value <= Key::ASCIITILDE) { + if (is_oem && Key::SPACE <= (Key)unicode_value && (Key)unicode_value <= Key::ASCIITILDE) { keycode = fix_keycode(unicode_value, (Key)unicode_value); } key_label = fix_key_label(unicode_value, keycode); From d08ff57148c42b63e74adb669f6937d35fde1f6e Mon Sep 17 00:00:00 2001 From: Florent Guiocheau Date: Wed, 22 Jan 2025 17:05:04 +0100 Subject: [PATCH 008/114] Fix peter-panning with default spotlight --- .../renderer_rd/shaders/scene_forward_lights_inc.glsl | 2 +- servers/rendering/renderer_scene_cull.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl index 8e393c07bdb..6fb8fe6ca33 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl @@ -733,7 +733,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v vec4 v = vec4(vertex + normal_bias, 1.0); vec4 splane = (spot_lights.data[idx].shadow_matrix * v); - splane.z += spot_lights.data[idx].shadow_bias / (light_length * spot_lights.data[idx].inv_radius); + splane.z += spot_lights.data[idx].shadow_bias; splane /= splane.w; if (sc_use_light_soft_shadows() && spot_lights.data[idx].soft_shadow_size > 0.0) { diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 0b98fc6769e..ef79ef8cda7 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -2510,7 +2510,7 @@ bool RendererSceneCull::_light_instance_update_shadow(Instance *p_instance, cons } real_t radius = RSG::light_storage->light_get_param(p_instance->base, RS::LIGHT_PARAM_RANGE); - real_t z_near = MIN(0.005f, radius); + real_t z_near = MIN(0.025f, radius); Projection cm; cm.set_perspective(90, 1, z_near, radius); @@ -2600,7 +2600,7 @@ bool RendererSceneCull::_light_instance_update_shadow(Instance *p_instance, cons real_t radius = RSG::light_storage->light_get_param(p_instance->base, RS::LIGHT_PARAM_RANGE); real_t angle = RSG::light_storage->light_get_param(p_instance->base, RS::LIGHT_PARAM_SPOT_ANGLE); - real_t z_near = MIN(0.005f, radius); + real_t z_near = MIN(0.025f, radius); Projection cm; cm.set_perspective(angle * 2.0, 1.0, z_near, radius); From f65df7e1f50c02e983a32889581124c9bf16e1cd Mon Sep 17 00:00:00 2001 From: havi05 Date: Fri, 24 Jan 2025 08:11:50 +0100 Subject: [PATCH 009/114] Fix `Itemlist` font color in `Light` editor themes --- editor/themes/editor_theme_manager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/themes/editor_theme_manager.cpp b/editor/themes/editor_theme_manager.cpp index fb7dab8d76e..3437ab387d5 100644 --- a/editor/themes/editor_theme_manager.cpp +++ b/editor/themes/editor_theme_manager.cpp @@ -1073,6 +1073,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref &p_the p_theme->set_stylebox("hovered_selected_focus", "ItemList", style_itemlist_hover_selected); p_theme->set_color(SceneStringName(font_color), "ItemList", p_config.font_color); p_theme->set_color("font_hovered_color", "ItemList", p_config.mono_color); + p_theme->set_color("font_hovered_selected_color", "ItemList", p_config.mono_color); p_theme->set_color("font_selected_color", "ItemList", p_config.mono_color); p_theme->set_color("font_outline_color", "ItemList", p_config.font_outline_color); p_theme->set_color("guide_color", "ItemList", Color(1, 1, 1, 0)); From ff690915181c03ffa823e21ed28c84b72de80ed3 Mon Sep 17 00:00:00 2001 From: Martin Majewski Date: Fri, 24 Jan 2025 16:13:17 +0100 Subject: [PATCH 010/114] Ignore built Godot.app package Following the "compiling for mac" tutorial one will eventually end with a Godot.app package inside the repo folder. To prevent it from being tracked by git, it has been added to gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 22a1d53a879..2c3bf742ba2 100644 --- a/.gitignore +++ b/.gitignore @@ -363,6 +363,7 @@ cpp.hint # macOS .DS_Store __MACOSX +Godot.app # Windows # https://github.com/github/gitignore/blob/main/Global/Windows.gitignore From b567709fdd91f2778097528c106ccb0a413c48e2 Mon Sep 17 00:00:00 2001 From: Robert Yevdokimov <105675984+ryevdokimov@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:01:38 +0400 Subject: [PATCH 011/114] Fix visible viewport gizmos when preview camera is enabled on startup --- editor/plugins/node_3d_editor_plugin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 2e89bb47061..6a8c8209873 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -4268,6 +4268,7 @@ void Node3DEditorViewport::set_state(const Dictionary &p_state) { previewing->connect(SceneStringName(tree_exiting), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene)); RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), previewing->get_camera()); //replace surface->queue_redraw(); + previewing_camera = true; preview_camera->set_pressed(true); preview_camera->show(); } From 3d8301445d280fad2205044459da79d554b05ebb Mon Sep 17 00:00:00 2001 From: Muller-Castro <37383316+Muller-Castro@users.noreply.github.com> Date: Sat, 25 Jan 2025 19:30:06 -0300 Subject: [PATCH 012/114] Change from blender directory to blender exec Co-authored-by: Hugo Locurcio --- doc/classes/EditorSettings.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 3900a81502c..db8041098a3 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -711,8 +711,28 @@ Port used for file server when exporting project with remote file system. - The path to the directory containing the Blender executable used for converting the Blender 3D scene files [code].blend[/code] to glTF 2.0 format during import. Blender 3.0 or later is required. + The path to the Blender executable used for converting the Blender 3D scene files [code].blend[/code] to glTF 2.0 format during import. Blender 3.0 or later is required. To enable this feature for your specific project, use [member ProjectSettings.filesystem/import/blender/enabled]. + If this setting is empty, Blender's default paths will be detected and used automatically if present in this order: + [b]Windows:[/b] + [codeblock] + - C:\Program Files\Blender Foundation\blender.exe + - C:\Program Files (x86)\Blender Foundation\blender.exe + [/codeblock] + [b]macOS:[/b] + [codeblock] + - /opt/homebrew/bin/blender + - /opt/local/bin/blender + - /usr/local/bin/blender + - /usr/local/opt/blender + - /Applications/Blender.app/Contents/MacOS/Blender + [/codeblock] + [b]Linux/*BSD:[/b] + [codeblock] + - /usr/bin/blender + - /usr/local/bin/blender + - /opt/blender/bin/blender + [/codeblock] The port number used for Remote Procedure Call (RPC) communication with Godot's created process of the blender executable. From f52c9e342c42d07b65036167baf3c0316721c09a Mon Sep 17 00:00:00 2001 From: Lukas Tenbrink Date: Tue, 28 Jan 2025 18:15:59 +0100 Subject: [PATCH 013/114] Optimize `Font` calculations by avoiding unnecessary copy-on-write. --- scene/resources/font.cpp | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index dfaa41a7cc2..7cfd9ae7f1e 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -210,9 +210,10 @@ real_t Font::get_height(int p_font_size) const { if (dirty_rids) { _update_rids(); } + real_t ret = 0.f; for (int i = 0; i < rids.size(); i++) { - ret = MAX(ret, TS->font_get_ascent(rids[i], p_font_size) + TS->font_get_descent(rids[i], p_font_size)); + ret = MAX(ret, TS->font_get_ascent(rids.get(i), p_font_size) + TS->font_get_descent(rids.get(i), p_font_size)); } return ret + get_spacing(TextServer::SPACING_BOTTOM) + get_spacing(TextServer::SPACING_TOP); } @@ -223,7 +224,7 @@ real_t Font::get_ascent(int p_font_size) const { } real_t ret = 0.f; for (int i = 0; i < rids.size(); i++) { - ret = MAX(ret, TS->font_get_ascent(rids[i], p_font_size)); + ret = MAX(ret, TS->font_get_ascent(rids.get(i), p_font_size)); } return ret + get_spacing(TextServer::SPACING_TOP); } @@ -234,7 +235,7 @@ real_t Font::get_descent(int p_font_size) const { } real_t ret = 0.f; for (int i = 0; i < rids.size(); i++) { - ret = MAX(ret, TS->font_get_descent(rids[i], p_font_size)); + ret = MAX(ret, TS->font_get_descent(rids.get(i), p_font_size)); } return ret + get_spacing(TextServer::SPACING_BOTTOM); } @@ -245,7 +246,7 @@ real_t Font::get_underline_position(int p_font_size) const { } real_t ret = 0.f; for (int i = 0; i < rids.size(); i++) { - ret = MAX(ret, TS->font_get_underline_position(rids[i], p_font_size)); + ret = MAX(ret, TS->font_get_underline_position(rids.get(i), p_font_size)); } return ret + get_spacing(TextServer::SPACING_TOP); } @@ -256,7 +257,7 @@ real_t Font::get_underline_thickness(int p_font_size) const { } real_t ret = 0.f; for (int i = 0; i < rids.size(); i++) { - ret = MAX(ret, TS->font_get_underline_thickness(rids[i], p_font_size)); + ret = MAX(ret, TS->font_get_underline_thickness(rids.get(i), p_font_size)); } return ret; } @@ -476,9 +477,9 @@ Size2 Font::get_char_size(char32_t p_char, int p_font_size) const { _update_rids(); } for (int i = 0; i < rids.size(); i++) { - if (TS->font_has_char(rids[i], p_char)) { - int32_t glyph = TS->font_get_glyph_index(rids[i], p_font_size, p_char, 0); - return Size2(TS->font_get_glyph_advance(rids[i], p_font_size, glyph).x, get_height(p_font_size)); + if (TS->font_has_char(rids.get(i), p_char)) { + int32_t glyph = TS->font_get_glyph_index(rids.get(i), p_font_size, p_char, 0); + return Size2(TS->font_get_glyph_advance(rids.get(i), p_font_size, glyph).x, get_height(p_font_size)); } } return Size2(); @@ -489,10 +490,10 @@ real_t Font::draw_char(RID p_canvas_item, const Point2 &p_pos, char32_t p_char, _update_rids(); } for (int i = 0; i < rids.size(); i++) { - if (TS->font_has_char(rids[i], p_char)) { - int32_t glyph = TS->font_get_glyph_index(rids[i], p_font_size, p_char, 0); - TS->font_draw_glyph(rids[i], p_canvas_item, p_font_size, p_pos, glyph, p_modulate); - return TS->font_get_glyph_advance(rids[i], p_font_size, glyph).x; + if (TS->font_has_char(rids.get(i), p_char)) { + int32_t glyph = TS->font_get_glyph_index(rids.get(i), p_font_size, p_char, 0); + TS->font_draw_glyph(rids.get(i), p_canvas_item, p_font_size, p_pos, glyph, p_modulate); + return TS->font_get_glyph_advance(rids.get(i), p_font_size, glyph).x; } } return 0.f; @@ -503,10 +504,10 @@ real_t Font::draw_char_outline(RID p_canvas_item, const Point2 &p_pos, char32_t _update_rids(); } for (int i = 0; i < rids.size(); i++) { - if (TS->font_has_char(rids[i], p_char)) { - int32_t glyph = TS->font_get_glyph_index(rids[i], p_font_size, p_char, 0); - TS->font_draw_glyph_outline(rids[i], p_canvas_item, p_font_size, p_size, p_pos, glyph, p_modulate); - return TS->font_get_glyph_advance(rids[i], p_font_size, glyph).x; + if (TS->font_has_char(rids.get(i), p_char)) { + int32_t glyph = TS->font_get_glyph_index(rids.get(i), p_font_size, p_char, 0); + TS->font_draw_glyph_outline(rids.get(i), p_canvas_item, p_font_size, p_size, p_pos, glyph, p_modulate); + return TS->font_get_glyph_advance(rids.get(i), p_font_size, glyph).x; } } return 0.f; @@ -518,7 +519,7 @@ bool Font::has_char(char32_t p_char) const { _update_rids(); } for (int i = 0; i < rids.size(); i++) { - if (TS->font_has_char(rids[i], p_char)) { + if (TS->font_has_char(rids.get(i), p_char)) { return true; } } @@ -531,7 +532,7 @@ String Font::get_supported_chars() const { } String chars; for (int i = 0; i < rids.size(); i++) { - String data_chars = TS->font_get_supported_chars(rids[i]); + String data_chars = TS->font_get_supported_chars(rids.get(i)); for (int j = 0; j < data_chars.length(); j++) { if (chars.find_char(data_chars[j]) == -1) { chars += data_chars[j]; From bde87db4437b5b9a00299bf9f3c147a842505144 Mon Sep 17 00:00:00 2001 From: Giganzo <158825920+Giganzo@users.noreply.github.com> Date: Tue, 28 Jan 2025 06:40:28 +0100 Subject: [PATCH 014/114] Fix get_item_area_rect when tree is scrolled --- editor/plugins/animation_library_editor.cpp | 4 +- scene/gui/tree.cpp | 41 ++++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index a4224db1c3d..da31447b561 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -605,7 +605,7 @@ void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int file_popup->add_separator(); file_popup->add_item(TTR("Open in Inspector"), FILE_MENU_EDIT_LIBRARY); Rect2 pos = tree->get_item_rect(p_item, 1, 0); - Vector2 popup_pos = tree->get_screen_transform().xform(pos.position + Vector2(0, pos.size.height)) - tree->get_scroll(); + Vector2 popup_pos = tree->get_screen_transform().xform(pos.position + Vector2(0, pos.size.height)); file_popup->popup(Rect2(popup_pos, Size2())); file_dialog_animation = StringName(); @@ -645,7 +645,7 @@ void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int file_popup->add_separator(); file_popup->add_item(TTR("Open in Inspector"), FILE_MENU_EDIT_ANIMATION); Rect2 pos = tree->get_item_rect(p_item, 1, 0); - Vector2 popup_pos = tree->get_screen_transform().xform(pos.position + Vector2(0, pos.size.height)) - tree->get_scroll(); + Vector2 popup_pos = tree->get_screen_transform().xform(pos.position + Vector2(0, pos.size.height)); file_popup->popup(Rect2(popup_pos, Size2())); file_dialog_animation = anim_name; diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 5de64bbe3fd..679b13afa03 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -5208,10 +5208,12 @@ Rect2 Tree::get_item_rect(TreeItem *p_item, int p_column, int p_button) const { } int ofs = get_item_offset(p_item); - int height = compute_item_height(p_item); + int height = compute_item_height(p_item) + theme_cache.v_separation; Rect2 r; - r.position.y = ofs; + r.position.y = ofs - theme_cache.offset.y + theme_cache.panel_style->get_offset().y; r.size.height = height; + bool rtl = is_layout_rtl(); + const Rect2 content_rect = _get_content_rect(); if (p_column == -1) { r.position.x = 0; @@ -5221,18 +5223,45 @@ Rect2 Tree::get_item_rect(TreeItem *p_item, int p_column, int p_button) const { for (int i = 0; i < p_column; i++) { accum += get_column_width(i); } - r.position.x = accum; + r.position.x = (rtl) ? get_size().x - (accum - theme_cache.offset.x) - get_column_width(p_column) - theme_cache.panel_style->get_margin(SIDE_LEFT) : accum - theme_cache.offset.x + theme_cache.panel_style->get_margin(SIDE_LEFT); r.size.x = get_column_width(p_column); if (p_button != -1) { + // RTL direction support for button rect is different due to buttons not + // having same behavior as they do in LTR when tree is scrolled. const TreeItem::Cell &c = p_item->cells[p_column]; - Vector2 ofst = Vector2(r.position.x + r.size.x, r.position.y); + Vector2 ofst = Vector2(r.position.x + r.size.x + theme_cache.button_margin, r.position.y); + + // Compute total width of buttons block including spacings. + int buttons_width = 0; + for (int j = c.buttons.size() - 1; j >= 0; j--) { + Ref b = c.buttons[j].texture; + Size2 size = b->get_size() + theme_cache.button_pressed->get_minimum_size(); + buttons_width += size.width + theme_cache.button_margin; + } for (int j = c.buttons.size() - 1; j >= 0; j--) { Ref b = c.buttons[j].texture; Size2 size = b->get_size() + theme_cache.button_pressed->get_minimum_size(); - ofst.x -= size.x; + ofst.x -= size.x + theme_cache.button_margin; + + if (rtl) { + if (j == p_button) { + return Rect2(r.position, Size2(size.x, r.size.y)); + } + r.position.x += size.x + theme_cache.button_margin; + continue; + } if (j == p_button) { - return Rect2(ofst, size); + float content_rect_end_x = content_rect.position.x + content_rect.size.width; + if (r.position.x + r.size.x < content_rect_end_x) { + return Rect2(ofst, Size2(size.x, r.size.y)); + } + // Button block can be outside of content_rect + if (content_rect_end_x - (r.position.x + theme_cache.h_separation) < buttons_width) { + return Rect2(r.position + Point2(theme_cache.h_separation + (buttons_width - ((r.position.x + r.size.x) - ofst.x)), 0), Size2(size.x, r.size.y)); + } + + return Rect2(ofst - Vector2((r.position.x + r.size.x) - content_rect_end_x, 0), Size2(size.x, r.size.y)); } } } From a35c3515c94f073a31b203e7a6cca8406aa6f388 Mon Sep 17 00:00:00 2001 From: Hendrik Brucker Date: Fri, 31 Jan 2025 03:50:36 +0100 Subject: [PATCH 015/114] [AudioFilterSW] Fix audio cutting out due to numerical errors --- servers/audio/audio_filter_sw.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/servers/audio/audio_filter_sw.h b/servers/audio/audio_filter_sw.h index 156b4812c5d..dfaaf9145db 100644 --- a/servers/audio/audio_filter_sw.h +++ b/servers/audio/audio_filter_sw.h @@ -36,11 +36,11 @@ class AudioFilterSW { public: struct Coeffs { - float a1 = 0.0f; - float a2 = 0.0f; - float b0 = 0.0f; - float b1 = 0.0f; - float b2 = 0.0f; + double a1 = 0.0; + double a2 = 0.0; + double b0 = 0.0; + double b1 = 0.0; + double b2 = 0.0; }; enum Mode { From ceea97fc05fe66b471f521628eacf83bbd1bb554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 31 Jan 2025 23:04:46 +0100 Subject: [PATCH 016/114] Betsy: Consolidate documentation in module folder and cleanup SCsub Also remove unused `UavCrossPlatform_piece_all.glsl`. --- COPYRIGHT.txt | 14 +++++++++----- .../betsy/LICENSE.Betsy.md | 0 modules/betsy/SCsub | 19 ++++--------------- modules/betsy/UavCrossPlatform_piece_all.glsl | 16 ---------------- modules/betsy/alpha_stitch.glsl | 1 - modules/betsy/bc1.glsl | 1 - modules/betsy/bc4.glsl | 1 - modules/betsy/bc6h.glsl | 1 - thirdparty/README.md | 12 ------------ 9 files changed, 13 insertions(+), 52 deletions(-) rename thirdparty/betsy/LICENSE.md => modules/betsy/LICENSE.Betsy.md (100%) delete mode 100644 modules/betsy/UavCrossPlatform_piece_all.glsl diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 34e95d2f413..a7a09a553ba 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -61,6 +61,15 @@ Copyright: 2011, Ole Kniemeyer, MAXON, www.maxon.net 2007-2014, Juan Linietsky, Ariel Manzur License: Expat and Zlib +Files: modules/betsy/alpha_stitch.glsl + modules/betsy/bc1.glsl + modules/betsy/bc4.glsl + modules/betsy/bc6h.glsl + modules/betsy/CrossPlatformSettings_piece_all.glsl +Comment: Betsy +Copyright: 2020-2022, Matias N. Goldberg +License: Expat + Files: modules/godot_physics_2d/godot_joints_2d.cpp Comment: Chipmunk2D Joint Constraints Copyright: 2007, Scott Lembcke @@ -179,11 +188,6 @@ Comment: Basis Universal Copyright: 2019-2024, Binomial LLC. License: Apache-2.0 -Files: thirdparty/betsy/* -Comment: Betsy -Copyright: 2020-2022, Matias N. Goldberg -License: Expat - Files: thirdparty/brotli/* Comment: Brotli Copyright: 2009, 2010, 2013-2016 by the Brotli Authors. diff --git a/thirdparty/betsy/LICENSE.md b/modules/betsy/LICENSE.Betsy.md similarity index 100% rename from thirdparty/betsy/LICENSE.md rename to modules/betsy/LICENSE.Betsy.md diff --git a/modules/betsy/SCsub b/modules/betsy/SCsub index 9ed5fc4ee80..7bd0b1bb3d8 100644 --- a/modules/betsy/SCsub +++ b/modules/betsy/SCsub @@ -5,25 +5,14 @@ Import("env") Import("env_modules") env_betsy = env_modules.Clone() + +# Betsy shaders, originally from https://github.com/darksylinc/betsy env_betsy.GLSL_HEADER("bc6h.glsl") env_betsy.GLSL_HEADER("bc1.glsl") env_betsy.GLSL_HEADER("bc4.glsl") env_betsy.GLSL_HEADER("alpha_stitch.glsl") -env_betsy.Depends(Glob("*.glsl.gen.h"), ["#glsl_builders.py"]) - -# Thirdparty source files -thirdparty_obj = [] -thirdparty_dir = "#thirdparty/betsy/" -env_betsy.Prepend(CPPPATH=[thirdparty_dir]) -env_thirdparty = env_betsy.Clone() -env_thirdparty.disable_warnings() -env.modules_sources += thirdparty_obj +env_betsy.Depends(Glob("*.glsl.gen.h"), ["#glsl_builders.py"]) # Godot source files -module_obj = [] -env_betsy.add_source_files(module_obj, "*.cpp") -env.modules_sources += module_obj - -# Needed to force rebuilding the module files when the thirdparty library is updated. -env.Depends(module_obj, thirdparty_obj) +env_betsy.add_source_files(env.modules_sources, "*.cpp") diff --git a/modules/betsy/UavCrossPlatform_piece_all.glsl b/modules/betsy/UavCrossPlatform_piece_all.glsl deleted file mode 100644 index 5f074137af9..00000000000 --- a/modules/betsy/UavCrossPlatform_piece_all.glsl +++ /dev/null @@ -1,16 +0,0 @@ -#define OGRE_imageLoad2D(inImage, iuv) imageLoad(inImage, int2(iuv)) -#define OGRE_imageLoad2DArray(inImage, iuvw) imageLoad(inImage, int3(iuvw)) - -#define OGRE_imageWrite2D1(outImage, iuv, value) imageStore(outImage, int2(iuv), float4(value, 0, 0, 0)) -#define OGRE_imageWrite2D2(outImage, iuv, value) imageStore(outImage, int2(iuv), float4(value, 0, 0)) -#define OGRE_imageWrite2D4(outImage, iuv, value) imageStore(outImage, int2(iuv), value) - -#define OGRE_imageLoad3D(inImage, iuv) imageLoad(inImage, int3(iuv)) - -#define OGRE_imageWrite3D1(outImage, iuv, value) imageStore(outImage, int3(iuv), value) -#define OGRE_imageWrite3D4(outImage, iuv, value) imageStore(outImage, int3(iuv), value) - -#define OGRE_imageWrite2DArray1(outImage, iuvw, value) imageStore(outImage, int3(iuvw), value) -#define OGRE_imageWrite2DArray4(outImage, iuvw, value) imageStore(outImage, int3(iuvw), value) - -//#define sharedOnlyBarrier memoryBarrierShared();barrier(); diff --git a/modules/betsy/alpha_stitch.glsl b/modules/betsy/alpha_stitch.glsl index 4a9ee58d97b..4245b6419c7 100644 --- a/modules/betsy/alpha_stitch.glsl +++ b/modules/betsy/alpha_stitch.glsl @@ -6,7 +6,6 @@ #version 450 #include "CrossPlatformSettings_piece_all.glsl" -#include "UavCrossPlatform_piece_all.glsl" layout(local_size_x = 8, // local_size_y = 8, // diff --git a/modules/betsy/bc1.glsl b/modules/betsy/bc1.glsl index 96877553a5d..6b6346aacf3 100644 --- a/modules/betsy/bc1.glsl +++ b/modules/betsy/bc1.glsl @@ -7,7 +7,6 @@ dithered = "#define BC1_DITHER"; #version 450 #include "CrossPlatformSettings_piece_all.glsl" -#include "UavCrossPlatform_piece_all.glsl" #define FLT_MAX 340282346638528859811704183484516925440.0f diff --git a/modules/betsy/bc4.glsl b/modules/betsy/bc4.glsl index 7a68b92b851..90151f84ebf 100644 --- a/modules/betsy/bc4.glsl +++ b/modules/betsy/bc4.glsl @@ -7,7 +7,6 @@ signed = "#define SNORM"; #version 450 #include "CrossPlatformSettings_piece_all.glsl" -#include "UavCrossPlatform_piece_all.glsl" #VERSION_DEFINES diff --git a/modules/betsy/bc6h.glsl b/modules/betsy/bc6h.glsl index 37e7591aea2..73540876aa8 100644 --- a/modules/betsy/bc6h.glsl +++ b/modules/betsy/bc6h.glsl @@ -7,7 +7,6 @@ unsigned = "#define QUALITY"; // The "Quality" preset causes artifacting on sign #version 450 #include "CrossPlatformSettings_piece_all.glsl" -#include "UavCrossPlatform_piece_all.glsl" #VERSION_DEFINES diff --git a/thirdparty/README.md b/thirdparty/README.md index 5e264ae4dee..5c2ea489e2c 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -71,18 +71,6 @@ Files extracted from upstream source: Applied upstream PR https://github.com/BinomialLLC/basis_universal/pull/344 to fix build with our own copy of zstd (patch in `patches`). -## betsy - -- Upstream: https://github.com/darksylinc/betsy -- Version: git (cc723dcae9a6783ae572f64d12a90d60ef8d631a, 2022) -- License: MIT - -Files extracted from upstream source: - -- `bc6h.glsl`, `bc1.glsl`, `bc4.glsl`, `CrossPlatformSettings_piece_all.glsl` and `UavCrossPlatform_piece_all.glsl`. -- `LICENSE.md` - - ## brotli - Upstream: https://github.com/google/brotli From 53e6d30771758eb852bdc2bc64f82ee9274e17bc Mon Sep 17 00:00:00 2001 From: Chaosus Date: Sat, 1 Feb 2025 14:35:57 +0300 Subject: [PATCH 017/114] Fix crash when assigning wrong shader to particle process material --- .../renderer_rd/storage_rd/particles_storage.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp index 6bb7eff83cf..5a20b3ac64e 100644 --- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp @@ -1325,10 +1325,11 @@ void ParticlesStorage::particles_set_view_axis(RID p_particles, const Vector3 &p void ParticlesStorage::_particles_update_buffers(Particles *particles) { uint32_t userdata_count = 0; - MaterialStorage::ShaderData *shader_data = MaterialStorage::get_singleton()->material_get_shader_data(particles->process_material); - if (shader_data) { - const ParticlesShaderData *particle_shader_data = static_cast(shader_data); - userdata_count = particle_shader_data->userdata_count; + if (particles->process_material.is_valid()) { + ParticleProcessMaterialData *material_data = static_cast(MaterialStorage::get_singleton()->material_get_data(particles->process_material, MaterialStorage::SHADER_TYPE_PARTICLES)); + if (material_data && material_data->shader_data->version.is_valid() && material_data->shader_data->valid) { + userdata_count = material_data->shader_data->userdata_count; + } } bool uses_motion_vectors = RSG::viewport->get_num_viewports_with_motion_vectors() > 0 || (RendererCompositorStorage::get_singleton()->get_num_compositor_effects_with_motion_vectors() > 0); From 150191353fd960bbd562a9c5890760cf15216c3d Mon Sep 17 00:00:00 2001 From: Hilderin <81109165+Hilderin@users.noreply.github.com> Date: Sat, 1 Feb 2025 21:08:39 -0500 Subject: [PATCH 018/114] Fix Floating Window not visible after restore on KDE --- editor/window_wrapper.cpp | 5 +++++ platform/linuxbsd/x11/display_server_x11.cpp | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/editor/window_wrapper.cpp b/editor/window_wrapper.cpp index a680dd79c67..4d82df70db9 100644 --- a/editor/window_wrapper.cpp +++ b/editor/window_wrapper.cpp @@ -261,6 +261,11 @@ void WindowWrapper::restore_window_from_saved_position(const Rect2 p_window_rect window_rect = Rect2i(window_rect.position * screen_ratio, window_rect.size * screen_ratio); window_rect.position += real_screen_rect.position; + // Make sure to restore the window if the user minimized it the last time it was displayed. + if (window->get_mode() == Window::MODE_MINIMIZED) { + window->set_mode(Window::MODE_WINDOWED); + } + // All good, restore the window. window->set_current_screen(p_screen); if (window->is_visible()) { diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index cbd3662986c..e73cb4376dd 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -4727,6 +4727,13 @@ void DisplayServerX11::process_events() { // Have we failed to set fullscreen while the window was unmapped? _validate_mode_on_map(window_id); + + // On KDE Plasma, when the parent window of an embedded process is restored after being minimized, + // only the embedded window receives the Map notification, causing it to + // appear without its parent. + if (wd.embed_parent) { + XMapWindow(x11_display, wd.embed_parent); + } } break; case Expose: { From bc0efb86a9879584aa809d95200a09e6b4ec0481 Mon Sep 17 00:00:00 2001 From: Hilderin <81109165+Hilderin@users.noreply.github.com> Date: Sat, 1 Feb 2025 22:27:57 -0500 Subject: [PATCH 019/114] Fix Floating Window overlapping when on screen edge --- platform/linuxbsd/x11/display_server_x11.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index cbd3662986c..620f1bf30b1 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -1364,8 +1364,6 @@ Rect2i DisplayServerX11::screen_get_usable_rect(int p_screen) const { } if (desktop_valid) { - use_simple_method = false; - // Handle bad window errors silently because there's no other way to check // that one of the windows has been destroyed in the meantime. int (*oldHandler)(Display *, XErrorEvent *) = XSetErrorHandler(&bad_window_error_handler); @@ -1393,6 +1391,8 @@ Rect2i DisplayServerX11::screen_get_usable_rect(int p_screen) const { } } if (!g_bad_window && strut_found && (format == 32) && (strut_len >= 4) && strut_data) { + use_simple_method = false; + long *struts = (long *)strut_data; long left = struts[0]; From 4d488e8cc93509526af3be2037996132cb1af14c Mon Sep 17 00:00:00 2001 From: Marius Hanl Date: Sun, 2 Feb 2025 18:31:12 +0100 Subject: [PATCH 020/114] Fix Escape does not work the first time when pressed at the Find(Replace)Bar --- editor/code_editor.cpp | 21 ++++++--------------- editor/code_editor.h | 6 +++--- editor/editor_help.cpp | 10 +++++++--- editor/editor_help.h | 3 ++- 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index ef5d878ca0a..50f21533c4c 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -145,7 +145,7 @@ void FindReplaceBar::_notification(int p_what) { } break; case NOTIFICATION_VISIBILITY_CHANGED: { - set_process_unhandled_input(is_visible_in_tree()); + set_process_input(is_visible_in_tree()); } break; case NOTIFICATION_THEME_CHANGED: { @@ -161,11 +161,11 @@ void FindReplaceBar::_notification(int p_what) { } } -void FindReplaceBar::unhandled_input(const Ref &p_event) { +// Implemented in input(..) as the LineEdit consumes the Escape pressed key. +void FindReplaceBar::input(const Ref &p_event) { ERR_FAIL_COND(p_event.is_null()); Ref k = p_event; - if (k.is_valid() && k->is_action_pressed(SNAME("ui_cancel"), false, true)) { Control *focus_owner = get_viewport()->gui_get_focus_owner(); @@ -176,13 +176,6 @@ void FindReplaceBar::unhandled_input(const Ref &p_event) { } } -void FindReplaceBar::_focus_lost() { - if (Input::get_singleton()->is_action_pressed(SNAME("ui_cancel"))) { - // Unfocused after pressing Escape, so hide the bar. - _hide_bar(true); - } -} - void FindReplaceBar::_update_flags(bool p_direction_backwards) { flags = 0; @@ -564,8 +557,8 @@ bool FindReplaceBar::search_next() { return _search(flags, line, col); } -void FindReplaceBar::_hide_bar(bool p_force_focus) { - if (replace_text->has_focus() || search_text->has_focus() || p_force_focus) { +void FindReplaceBar::_hide_bar() { + if (replace_text->has_focus() || search_text->has_focus()) { text_editor->grab_focus(); } @@ -789,7 +782,6 @@ FindReplaceBar::FindReplaceBar() { search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); search_text->connect(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_search_text_changed)); search_text->connect(SceneStringName(text_submitted), callable_mp(this, &FindReplaceBar::_search_text_submitted)); - search_text->connect(SceneStringName(focus_exited), callable_mp(this, &FindReplaceBar::_focus_lost)); matches_label = memnew(Label); hbc_button_search->add_child(matches_label); @@ -828,7 +820,6 @@ FindReplaceBar::FindReplaceBar() { replace_text->set_tooltip_text(TTR("Replace")); replace_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); replace_text->connect(SceneStringName(text_submitted), callable_mp(this, &FindReplaceBar::_replace_text_submitted)); - replace_text->connect(SceneStringName(focus_exited), callable_mp(this, &FindReplaceBar::_focus_lost)); replace = memnew(Button); hbc_button_replace->add_child(replace); @@ -850,7 +841,7 @@ FindReplaceBar::FindReplaceBar() { add_child(hide_button); hide_button->set_tooltip_text(TTR("Hide")); hide_button->set_focus_mode(FOCUS_NONE); - hide_button->connect(SceneStringName(pressed), callable_mp(this, &FindReplaceBar::_hide_bar).bind(false)); + hide_button->connect(SceneStringName(pressed), callable_mp(this, &FindReplaceBar::_hide_bar)); hide_button->set_v_size_flags(SIZE_SHRINK_CENTER); } diff --git a/editor/code_editor.h b/editor/code_editor.h index 091288c1bdc..d60d6b4d3b0 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -104,12 +104,14 @@ class FindReplaceBar : public HBoxContainer { bool replace_all_mode = false; bool preserve_cursor = false; + virtual void input(const Ref &p_event) override; + void _get_search_from(int &r_line, int &r_col, SearchMode p_search_mode); void _update_results_count(); void _update_matches_display(); void _show_search(bool p_with_replace, bool p_show_only); - void _hide_bar(bool p_force_focus = false); + void _hide_bar(); void _update_toggle_replace_button(bool p_replace_visible); void _editor_text_changed(); @@ -121,8 +123,6 @@ class FindReplaceBar : public HBoxContainer { protected: void _notification(int p_what); - virtual void unhandled_input(const Ref &p_event) override; - void _focus_lost(); void _update_flags(bool p_direction_backwards); diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 0caabffe56f..a577098168d 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -4581,6 +4581,7 @@ EditorHelpHighlighter::~EditorHelpHighlighter() { FindBar::FindBar() { search_text = memnew(LineEdit); add_child(search_text); + search_text->set_keep_editing_on_text_submit(true); search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); search_text->set_h_size_flags(SIZE_EXPAND_FILL); search_text->connect(SceneStringName(text_changed), callable_mp(this, &FindBar::_search_text_changed)); @@ -4644,7 +4645,7 @@ void FindBar::_notification(int p_what) { } break; case NOTIFICATION_VISIBILITY_CHANGED: { - set_process_unhandled_input(is_visible_in_tree()); + set_process_input(is_visible_in_tree()); } break; } } @@ -4721,12 +4722,15 @@ void FindBar::_hide_bar() { hide(); } -void FindBar::unhandled_input(const Ref &p_event) { +// Implemented in input(..) as the LineEdit consumes the Escape pressed key. +void FindBar::input(const Ref &p_event) { ERR_FAIL_COND(p_event.is_null()); Ref k = p_event; if (k.is_valid() && k->is_action_pressed(SNAME("ui_cancel"), false, true)) { - if (rich_text_label->has_focus() || is_ancestor_of(get_viewport()->gui_get_focus_owner())) { + Control *focus_owner = get_viewport()->gui_get_focus_owner(); + + if (rich_text_label->has_focus() || (focus_owner && is_ancestor_of(focus_owner))) { _hide_bar(); accept_event(); } diff --git a/editor/editor_help.h b/editor/editor_help.h index 9686d6e1abe..e1561215aad 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -57,6 +57,8 @@ class FindBar : public HBoxContainer { int results_count = 0; + virtual void input(const Ref &p_event) override; + void _hide_bar(); void _search_text_changed(const String &p_text); @@ -67,7 +69,6 @@ class FindBar : public HBoxContainer { protected: void _notification(int p_what); - virtual void unhandled_input(const Ref &p_event) override; bool _search(bool p_search_previous = false); From f791315b281b990966af7b6b66a61b559e34a2f1 Mon Sep 17 00:00:00 2001 From: Giganzo <158825920+Giganzo@users.noreply.github.com> Date: Tue, 4 Feb 2025 03:32:46 +0100 Subject: [PATCH 021/114] Fix Tree item_margin for low spacing values in Editor Theme --- editor/themes/editor_theme_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/themes/editor_theme_manager.cpp b/editor/themes/editor_theme_manager.cpp index fb7dab8d76e..4099874e80c 100644 --- a/editor/themes/editor_theme_manager.cpp +++ b/editor/themes/editor_theme_manager.cpp @@ -966,7 +966,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref &p_the p_theme->set_constant("v_separation", "Tree", p_config.separation_margin); p_theme->set_constant("h_separation", "Tree", (p_config.increased_margin + 2) * EDSCALE); p_theme->set_constant("guide_width", "Tree", p_config.border_width); - p_theme->set_constant("item_margin", "Tree", 3 * p_config.increased_margin * EDSCALE); + p_theme->set_constant("item_margin", "Tree", MAX(3 * p_config.increased_margin * EDSCALE, 12 * EDSCALE)); p_theme->set_constant("inner_item_margin_top", "Tree", p_config.separation_margin); p_theme->set_constant("inner_item_margin_bottom", "Tree", p_config.separation_margin); p_theme->set_constant("inner_item_margin_left", "Tree", p_config.increased_margin * EDSCALE); From 2f3f6f69d91b78a9e964c48e9b95d4c85e2c8590 Mon Sep 17 00:00:00 2001 From: Qbieshay Date: Tue, 4 Feb 2025 11:51:17 +0100 Subject: [PATCH 022/114] Fix seed not randomizing for particles. Fix seed being stored when fixed seed is off --- scene/2d/cpu_particles_2d.cpp | 5 ++++- scene/2d/gpu_particles_2d.cpp | 6 ++++-- scene/3d/cpu_particles_3d.cpp | 5 ++++- scene/3d/gpu_particles_3d.cpp | 6 ++++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp index aa449beb1b9..76cb24867a9 100644 --- a/scene/2d/cpu_particles_2d.cpp +++ b/scene/2d/cpu_particles_2d.cpp @@ -597,7 +597,7 @@ void CPUParticles2D::_validate_property(PropertyInfo &p_property) const { } if (p_property.name == "seed" && !use_fixed_seed) { - p_property.usage = PROPERTY_USAGE_NO_EDITOR; + p_property.usage = PROPERTY_USAGE_NONE; } } @@ -1392,6 +1392,8 @@ void CPUParticles2D::_bind_methods() { BIND_ENUM_CONSTANT(DRAW_ORDER_INDEX); BIND_ENUM_CONSTANT(DRAW_ORDER_LIFETIME); + ADD_PROPERTY_DEFAULT("seed", 0); + //////////////////////////////// ClassDB::bind_method(D_METHOD("set_direction", "direction"), &CPUParticles2D::set_direction); @@ -1561,6 +1563,7 @@ CPUParticles2D::CPUParticles2D() { set_emitting(true); set_amount(8); set_use_local_coordinates(false); + set_seed(Math::rand()); rng.instantiate(); diff --git a/scene/2d/gpu_particles_2d.cpp b/scene/2d/gpu_particles_2d.cpp index 23e90582809..81c9aa82dd4 100644 --- a/scene/2d/gpu_particles_2d.cpp +++ b/scene/2d/gpu_particles_2d.cpp @@ -408,7 +408,7 @@ Ref GPUParticles2D::get_texture() const { void GPUParticles2D::_validate_property(PropertyInfo &p_property) const { if (p_property.name == "seed" && !use_fixed_seed) { - p_property.usage = PROPERTY_USAGE_NO_EDITOR; + p_property.usage = PROPERTY_USAGE_NONE; } if (p_property.name == "emitting") { p_property.hint = one_shot ? PROPERTY_HINT_ONESHOT : PROPERTY_HINT_NONE; @@ -899,6 +899,8 @@ void GPUParticles2D::_bind_methods() { BIND_ENUM_CONSTANT(EMIT_FLAG_VELOCITY); BIND_ENUM_CONSTANT(EMIT_FLAG_COLOR); BIND_ENUM_CONSTANT(EMIT_FLAG_CUSTOM); + + ADD_PROPERTY_DEFAULT("seed", 0); } GPUParticles2D::GPUParticles2D() { @@ -912,8 +914,8 @@ GPUParticles2D::GPUParticles2D() { one_shot = false; // Needed so that set_emitting doesn't access uninitialized values set_emitting(true); set_one_shot(false); + set_seed(Math::rand()); set_use_fixed_seed(false); - set_seed(0); set_amount(8); set_amount_ratio(1.0); set_lifetime(1); diff --git a/scene/3d/cpu_particles_3d.cpp b/scene/3d/cpu_particles_3d.cpp index f150e07bcaa..0f4c887652e 100644 --- a/scene/3d/cpu_particles_3d.cpp +++ b/scene/3d/cpu_particles_3d.cpp @@ -612,7 +612,7 @@ void CPUParticles3D::_validate_property(PropertyInfo &p_property) const { } if (p_property.name == "seed" && !use_fixed_seed) { - p_property.usage = PROPERTY_USAGE_NO_EDITOR; + p_property.usage = PROPERTY_USAGE_NONE; } } @@ -1564,6 +1564,8 @@ void CPUParticles3D::_bind_methods() { BIND_ENUM_CONSTANT(DRAW_ORDER_LIFETIME); BIND_ENUM_CONSTANT(DRAW_ORDER_VIEW_DEPTH); + ADD_PROPERTY_DEFAULT("seed", 0); + //////////////////////////////// ClassDB::bind_method(D_METHOD("set_direction", "direction"), &CPUParticles3D::set_direction); @@ -1764,6 +1766,7 @@ CPUParticles3D::CPUParticles3D() { set_emitting(true); set_amount(8); + set_seed(Math::rand()); rng.instantiate(); diff --git a/scene/3d/gpu_particles_3d.cpp b/scene/3d/gpu_particles_3d.cpp index db2d2f41902..2d9435ce4a9 100644 --- a/scene/3d/gpu_particles_3d.cpp +++ b/scene/3d/gpu_particles_3d.cpp @@ -464,7 +464,7 @@ void GPUParticles3D::_validate_property(PropertyInfo &p_property) const { } } if (p_property.name == "seed" && !use_fixed_seed) { - p_property.usage = PROPERTY_USAGE_NO_EDITOR; + p_property.usage = PROPERTY_USAGE_NONE; } } @@ -868,6 +868,8 @@ void GPUParticles3D::_bind_methods() { BIND_ENUM_CONSTANT(TRANSFORM_ALIGN_Z_BILLBOARD); BIND_ENUM_CONSTANT(TRANSFORM_ALIGN_Y_TO_VELOCITY); BIND_ENUM_CONSTANT(TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY); + + ADD_PROPERTY_DEFAULT("seed", 0); } GPUParticles3D::GPUParticles3D() { @@ -877,6 +879,7 @@ GPUParticles3D::GPUParticles3D() { one_shot = false; // Needed so that set_emitting doesn't access uninitialized values set_emitting(true); set_one_shot(false); + set_seed(Math::rand()); set_amount_ratio(1.0); set_amount(8); set_lifetime(1); @@ -895,7 +898,6 @@ GPUParticles3D::GPUParticles3D() { set_collision_base_size(collision_base_size); set_transform_align(TRANSFORM_ALIGN_DISABLED); set_use_fixed_seed(false); - set_seed(0); } GPUParticles3D::~GPUParticles3D() { From dcf5244381dbcdaea558c3bb4f1bbfffab949942 Mon Sep 17 00:00:00 2001 From: Yyf2333 <2514537033@qq.com> Date: Tue, 4 Feb 2025 23:56:07 +0800 Subject: [PATCH 023/114] Refactor EditorNode get icon. Co-authored-by: Tomasz Chabora --- editor/editor_node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 40848610c62..fc2a65565ab 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -4941,7 +4941,7 @@ Ref EditorNode::get_class_icon(const String &p_class, const String &p String script_path; if (ScriptServer::is_global_class(p_class)) { script_path = ScriptServer::get_global_class_path(p_class); - } else if (ResourceLoader::exists(p_class)) { // If the script is not a class_name we check if the script resource exists. + } else if (!p_class.get_extension().is_empty() && ResourceLoader::exists(p_class)) { // If the script is not a class_name we check if the script resource exists. script_path = p_class; } From 9cb317c7c0cd75afb15f0558fcc445867165bdd1 Mon Sep 17 00:00:00 2001 From: Rudolph Bester Date: Tue, 4 Feb 2025 19:45:36 +0200 Subject: [PATCH 024/114] Fix over saturated static colored lights --- modules/lightmapper_rd/lm_compute.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl index ea7044c5710..9c05b42e8e7 100644 --- a/modules/lightmapper_rd/lm_compute.glsl +++ b/modules/lightmapper_rd/lm_compute.glsl @@ -648,7 +648,7 @@ void trace_direct_light(vec3 p_position, vec3 p_normal, uint p_light_index, bool } r_shadow = penumbra; - r_light = light_data.color * light_data.energy * attenuation * penumbra * penumbra_color; + r_light = light_data.energy * attenuation * penumbra * penumbra_color; } #endif From 327e5d3a4c25b7c207e1290e0acfbdf259145429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 4 Feb 2025 18:54:32 +0100 Subject: [PATCH 025/114] CI: Add a Linux job for `template_debug` --- .github/workflows/linux_builds.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index e978f9c8203..d966710cdde 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -74,7 +74,7 @@ jobs: artifact: false cache-limit: 5 - - name: Template w/ Mono (target=template_release, tests=yes) + - name: Template w/ Mono, release (target=template_release, tests=yes) cache-name: linux-template-mono target: template_release sconsflags: module_mono_enabled=yes @@ -84,6 +84,16 @@ jobs: artifact: true cache-limit: 1 + - name: Template w/ Mono, debug (target=template_debug, tests=yes) + cache-name: linux-template-mono-debug + target: template_debug + sconsflags: module_mono_enabled=yes + bin: ./bin/godot.linuxbsd.template_debug.x86_64.mono + build-mono: false + tests: true + artifact: true + cache-limit: 1 + - name: Minimal template (target=template_release, tests=yes, everything disabled) cache-name: linux-template-minimal target: template_release From 636b822781be4587811364f0f6959781497f4f82 Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Tue, 4 Feb 2025 12:38:06 +1100 Subject: [PATCH 026/114] editor: Fix node selection within SubViewports using size 2d override --- editor/plugins/canvas_item_editor_plugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 4256e74619a..a58659f29b4 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -623,7 +623,7 @@ void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_no return; } xform = vp->get_popup_base_transform(); - if (!vp->get_visible_rect().has_point(xform.xform_inv(p_pos))) { + if (!vp->get_visible_rect().has_point(xform.affine_inverse().xform(p_pos))) { return; } } @@ -726,7 +726,7 @@ void CanvasItemEditor::_find_canvas_items_in_rect(const Rect2 &p_rect, Node *p_n return; } xform = vp->get_popup_base_transform(); - if (!vp->get_visible_rect().intersects(xform.xform_inv(p_rect))) { + if (!vp->get_visible_rect().intersects(xform.affine_inverse().xform(p_rect))) { return; } } From daa074881b7d2e587bab814c0523d5d26edbe802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 4 Feb 2025 19:51:39 +0100 Subject: [PATCH 027/114] Revert "Fixed resource loader using not fully loaded scripts" This reverts commit fd5fc9f3eed26cb8c27e4a8ede29a4e539c1998a. This caused significant regressions which are worse than the bug that #96499 aimed to address. - Reverts #96499. - Reopens #95909. - Supersedes #102063. - Fixes #99006. - Fixes #101615. --- modules/gdscript/gdscript.cpp | 20 -------------------- modules/gdscript/gdscript.h | 1 - modules/gdscript/gdscript_cache.cpp | 3 +-- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 2383401630c..8ff0c63bd45 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -1075,26 +1075,6 @@ void GDScript::_bind_methods() { ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &GDScript::_new, MethodInfo("new")); } -void GDScript::set_path_cache(const String &p_path) { - if (ResourceCache::has(p_path)) { - set_path(p_path, true); - return; - } - - if (is_root_script()) { - Script::set_path_cache(p_path); - } - - String old_path = path; - path = p_path; - path_valid = true; - GDScriptCache::move_script(old_path, p_path); - - for (KeyValue> &kv : subclasses) { - kv.value->set_path_cache(p_path); - } -} - void GDScript::set_path(const String &p_path, bool p_take_over) { if (is_root_script()) { Script::set_path(p_path, p_take_over); diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index 9e96b883349..fa141d65ac5 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -309,7 +309,6 @@ class GDScript : public Script { virtual Error reload(bool p_keep_state = false) override; - virtual void set_path_cache(const String &p_path) override; virtual void set_path(const String &p_path, bool p_take_over = false) override; String get_script_path() const; Error load_source_code(const String &p_path); diff --git a/modules/gdscript/gdscript_cache.cpp b/modules/gdscript/gdscript_cache.cpp index c9a5f26c82b..90af67ccd60 100644 --- a/modules/gdscript/gdscript_cache.cpp +++ b/modules/gdscript/gdscript_cache.cpp @@ -312,7 +312,7 @@ Ref GDScriptCache::get_shallow_script(const String &p_path, Error &r_e Ref script; script.instantiate(); - script->set_path_cache(p_path); + script->set_path(p_path, true); if (remapped_path.get_extension().to_lower() == "gdc") { Vector buffer = get_binary_tokens(remapped_path); if (buffer.is_empty()) { @@ -360,7 +360,6 @@ Ref GDScriptCache::get_full_script(const String &p_path, Error &r_erro return script; } } - script->set_path(p_path, true); const String remapped_path = ResourceLoader::path_remap(p_path); From 6d4c2d002dd99cb4d51d26adaa5ca2977f16aa93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 4 Feb 2025 20:41:25 +0100 Subject: [PATCH 028/114] Revert "Use AHashMap for RBMap nodes and HashMap input_activity" This reverts commit c91c604eaa66d2307d13655ce513392e3bae77d6. This caused a critical regression: - Fixes #102374. --- scene/animation/animation_blend_tree.h | 2 +- scene/animation/animation_tree.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scene/animation/animation_blend_tree.h b/scene/animation/animation_blend_tree.h index 1b3d7f236e3..36a391ebdbd 100644 --- a/scene/animation/animation_blend_tree.h +++ b/scene/animation/animation_blend_tree.h @@ -410,7 +410,7 @@ class AnimationNodeBlendTree : public AnimationRootNode { Vector connections; }; - AHashMap nodes; + RBMap nodes; Vector2 graph_offset; diff --git a/scene/animation/animation_tree.h b/scene/animation/animation_tree.h index d5b1d4ea460..5ac24b49857 100644 --- a/scene/animation/animation_tree.h +++ b/scene/animation/animation_tree.h @@ -306,8 +306,8 @@ class AnimationTree : public AnimationMixer { uint64_t last_pass = 0; real_t activity = 0.0; }; - mutable AHashMap> input_activity_map; - mutable AHashMap *> input_activity_map_get; + mutable HashMap> input_activity_map; + mutable HashMap *> input_activity_map_get; NodePath animation_player; From ede3d2151913579d18203d3295abec10c864c72e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 4 Feb 2025 21:11:16 +0100 Subject: [PATCH 029/114] Don't expose AnimationNodeStartState and AnimationNodeEndState as internal, this triggers a ClassDB bug Fixes #99534. --- scene/animation/animation_node_state_machine.cpp | 3 ++- scene/register_scene_types.cpp | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp index 19acf8c1b16..1c4d489d687 100644 --- a/scene/animation/animation_node_state_machine.cpp +++ b/scene/animation/animation_node_state_machine.cpp @@ -1322,7 +1322,8 @@ bool AnimationNodeStateMachine::are_ends_reset() const { bool AnimationNodeStateMachine::can_edit_node(const StringName &p_name) const { if (states.has(p_name)) { - return !(states[p_name].node->is_class("AnimationNodeStartState") || states[p_name].node->is_class("AnimationNodeEndState")); + const AnimationNode *anode = states[p_name].node.ptr(); + return !(Object::cast_to(anode) || Object::cast_to(anode)); } return true; diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index bf5e9954349..a665fa90b8b 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -523,9 +523,6 @@ void register_scene_types() { GDREGISTER_CLASS(AnimationNodeStateMachinePlayback); GDREGISTER_VIRTUAL_CLASS(AnimationNodeExtension); - GDREGISTER_INTERNAL_CLASS(AnimationNodeStartState); - GDREGISTER_INTERNAL_CLASS(AnimationNodeEndState); - GDREGISTER_CLASS(AnimationNodeSync); GDREGISTER_CLASS(AnimationNodeStateMachineTransition); GDREGISTER_CLASS(AnimationNodeOutput); From bbfbde99e975e35940220d9e764c2a224e3dde2b Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Mon, 3 Feb 2025 19:10:04 -0800 Subject: [PATCH 030/114] Hide slider for array size selector in editor Use `editing_integer` so that editor has step buttons --- editor/editor_properties_array_dict.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 9663157ff99..93c5a70cf90 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -447,6 +447,7 @@ void EditorPropertyArray::update_property() { size_slider = memnew(EditorSpinSlider); size_slider->set_step(1); size_slider->set_max(INT32_MAX); + size_slider->set_editing_integer(true); size_slider->set_h_size_flags(SIZE_EXPAND_FILL); size_slider->set_read_only(is_read_only()); size_slider->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyArray::_length_changed)); From 1c384e7b78d7f64bec6d1e026785ed11053b840a Mon Sep 17 00:00:00 2001 From: Robert Yevdokimov <105675984+ryevdokimov@users.noreply.github.com> Date: Wed, 5 Feb 2025 06:17:36 +0400 Subject: [PATCH 031/114] Prevent save confirmation dialog from trying to parent to itself --- editor/editor_node.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 40848610c62..961d81c034f 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -5734,7 +5734,9 @@ void EditorNode::_cancel_close_scene_tab() { } void EditorNode::_prepare_save_confirmation_popup() { - save_confirmation->reparent(get_last_exclusive_window()); + if (save_confirmation->get_window() != get_last_exclusive_window()) { + save_confirmation->reparent(get_last_exclusive_window()); + } } void EditorNode::_toggle_distraction_free_mode() { From 9e4365f1a7bd10c2f8599d3a29730c0ed424d4a0 Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Tue, 4 Feb 2025 21:11:56 -0800 Subject: [PATCH 032/114] Export the `rendering/renderer/rendering_method.mobile` project setting to the AndroidManifest The AndroidManifest already stores the Godot editor and library versions. The addition of this meta-data allows to identify Godot Android apps that may be subject to renderer specific issues addressed in future versions of the engine. --- platform/android/export/export_plugin.cpp | 2 ++ platform/android/java/app/AndroidManifest.xml | 4 ++++ platform/android/java/app/build.gradle | 5 ++++- platform/android/java/app/config.gradle | 5 +++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index 752acc84995..578f723e700 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -3406,6 +3406,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Refglobalize_path("res://addons"); + String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method.mobile"); cmdline.push_back("-p"); // argument to specify the start directory. cmdline.push_back(build_path); // start directory. @@ -3423,6 +3424,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref + + } } +ext.getGodotRenderingMethod = { -> + String renderingMethod = project.hasProperty("godot_rendering_method") ? project.property("godot_rendering_method") : "" + return renderingMethod +} + ext.getGodotEditorVersion = { -> String editorVersion = project.hasProperty("godot_editor_version") ? project.property("godot_editor_version") : "" if (editorVersion == null || editorVersion.isEmpty()) { From 8af50726522773a9f5d280054c9517a694d7ff65 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 5 Feb 2025 10:57:06 +0100 Subject: [PATCH 033/114] Mention visibility layers and inheritance in `Node3D.is_visible_in_tree()` docs --- doc/classes/CanvasItem.xml | 2 +- doc/classes/Node3D.xml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 7651b61c5be..cf32dd313ff 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -535,7 +535,7 @@ Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its ancestors are also visible. If any ancestor is hidden, this node will not be visible in the scene tree, and is therefore not drawn (see [method _draw]). Visibility is checked only in parent nodes that inherit from [CanvasItem], [CanvasLayer], and [Window]. If the parent is of any other type (such as [Node], [AnimationPlayer], or [Node3D]), it is assumed to be visible. - [b]Note:[/b] This method does not take [member visibility_layer] into account, so even if this method returns [code]true[/code] the node might end up not being rendered. + [b]Note:[/b] This method does not take [member visibility_layer] into account, so even if this method returns [code]true[/code], the node might end up not being rendered. diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml index ba0272b02fe..d092fd50a99 100644 --- a/doc/classes/Node3D.xml +++ b/doc/classes/Node3D.xml @@ -117,6 +117,8 @@ Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its ancestors are also visible. If any ancestor is hidden, this node will not be visible in the scene tree. + Visibility is checked only in parent nodes that inherit from [Node3D]. If the parent is of any other type (such as [Node], [AnimationPlayer], or [Node2D]), it is assumed to be visible. + [b]Note:[/b] This method does not take [member VisualInstance3D.layers] into account, so even if this method returns [code]true[/code], the node might end up not being rendered. From f7d1558bc0c539865ae0c158c0afb7ac3cadd8c7 Mon Sep 17 00:00:00 2001 From: Hilderin <81109165+Hilderin@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:59:14 -0500 Subject: [PATCH 034/114] Fix Embedded Game disappear when not focused on KDE 5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rémi Verschelde --- platform/linuxbsd/x11/display_server_x11.cpp | 3 ++- platform/linuxbsd/x11/display_server_x11.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index 51db84fde02..95181a1c817 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -6276,7 +6276,7 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V } } - if (wd.is_popup || wd.no_focus || wd.embed_parent) { + if (wd.is_popup || wd.no_focus || (wd.embed_parent && !kde5_embed_workaround)) { // Set Utility type to disable fade animations. Atom type_atom = XInternAtom(x11_display, "_NET_WM_WINDOW_TYPE_UTILITY", False); Atom wt_atom = XInternAtom(x11_display, "_NET_WM_WINDOW_TYPE", False); @@ -6422,6 +6422,7 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode KeyMappingX11::initialize(); xwayland = OS::get_singleton()->get_environment("XDG_SESSION_TYPE").to_lower() == "wayland"; + kde5_embed_workaround = OS::get_singleton()->get_environment("XDG_CURRENT_DESKTOP").to_lower() == "kde" && OS::get_singleton()->get_environment("KDE_SESSION_VERSION") == "5"; native_menu = memnew(NativeMenu); context = p_context; diff --git a/platform/linuxbsd/x11/display_server_x11.h b/platform/linuxbsd/x11/display_server_x11.h index 166b2cb57b5..edd70d454da 100644 --- a/platform/linuxbsd/x11/display_server_x11.h +++ b/platform/linuxbsd/x11/display_server_x11.h @@ -338,6 +338,7 @@ class DisplayServerX11 : public DisplayServer { bool xinerama_ext_ok = true; bool xshaped_ext_ok = true; bool xwayland = false; + bool kde5_embed_workaround = false; // Workaround embedded game visibility on KDE 5 (GH-102043). struct Property { unsigned char *data; From 80096e9e629fe44b11f8e4b3c9d59b70b5cf13cc Mon Sep 17 00:00:00 2001 From: James Date: Mon, 20 Jan 2025 22:09:56 +0000 Subject: [PATCH 035/114] Fix a crash bug in LightmapGI::_assign_lightmaps triggered after reparenting After reparenting the LightmapGI node, the following `node` would be initialized to null: Node *node = get_node(light_data->get_user_path(i)); Which would then crash when de-referenced further down. This fix detects which the node has been reparented and clears its users. --- scene/3d/lightmap_gi.cpp | 6 ++++++ scene/3d/lightmap_gi.h | 1 + 2 files changed, 7 insertions(+) diff --git a/scene/3d/lightmap_gi.cpp b/scene/3d/lightmap_gi.cpp index 37380fd2b46..8f21260d573 100644 --- a/scene/3d/lightmap_gi.cpp +++ b/scene/3d/lightmap_gi.cpp @@ -1491,11 +1491,17 @@ void LightmapGI::_notification(int p_what) { "%s (%s): The directional lightmap textures are stored in a format that isn't supported anymore. Please bake lightmaps again to make lightmaps display from this node again.", get_light_data()->get_path(), get_name())); + if (last_owner && last_owner != get_owner()) { + light_data->clear_users(); + } + _assign_lightmaps(); } } break; case NOTIFICATION_EXIT_TREE: { + last_owner = get_owner(); + if (light_data.is_valid()) { _clear_lightmaps(); } diff --git a/scene/3d/lightmap_gi.h b/scene/3d/lightmap_gi.h index a48e599d681..0848239fee0 100644 --- a/scene/3d/lightmap_gi.h +++ b/scene/3d/lightmap_gi.h @@ -206,6 +206,7 @@ class LightmapGI : public VisualInstance3D { Ref camera_attributes; Ref light_data; + Node *last_owner = nullptr; struct LightsFound { Transform3D xform; From 1bba9dbce9104215170dd508180829270507fc86 Mon Sep 17 00:00:00 2001 From: Dario Date: Wed, 5 Feb 2025 09:49:15 -0300 Subject: [PATCH 036/114] Fix erroneous logic when flushes are involved on RD async methods. --- servers/rendering/rendering_device.cpp | 31 +++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/servers/rendering/rendering_device.cpp b/servers/rendering/rendering_device.cpp index 9716a42c97b..055fcbeda64 100644 --- a/servers/rendering/rendering_device.cpp +++ b/servers/rendering/rendering_device.cpp @@ -721,7 +721,6 @@ Error RenderingDevice::buffer_get_data_async(RID p_buffer, const Callable &p_cal _check_transfer_worker_buffer(buffer); BufferGetDataRequest get_data_request; - uint32_t flushed_copies = 0; get_data_request.callback = p_callback; get_data_request.frame_local_index = frames[frame].download_buffer_copy_regions.size(); get_data_request.size = p_size; @@ -738,22 +737,26 @@ Error RenderingDevice::buffer_get_data_async(RID p_buffer, const Callable &p_cal return err; } - if ((get_data_request.frame_local_count > 0) && required_action == STAGING_REQUIRED_ACTION_FLUSH_AND_STALL_ALL) { + const bool flush_frames = (get_data_request.frame_local_count > 0) && required_action == STAGING_REQUIRED_ACTION_FLUSH_AND_STALL_ALL; + if (flush_frames) { if (_buffer_make_mutable(buffer, p_buffer)) { // The buffer must be mutable to be used as a copy source. draw_graph.add_synchronization(); } - for (uint32_t i = flushed_copies; i < get_data_request.frame_local_count; i++) { + for (uint32_t i = 0; i < get_data_request.frame_local_count; i++) { uint32_t local_index = get_data_request.frame_local_index + i; draw_graph.add_buffer_get_data(buffer->driver_id, buffer->draw_tracker, frames[frame].download_buffer_staging_buffers[local_index], frames[frame].download_buffer_copy_regions[local_index]); } - - flushed_copies = get_data_request.frame_local_count; } _staging_buffer_execute_required_action(download_staging_buffers, required_action); + if (flush_frames) { + get_data_request.frame_local_count = 0; + get_data_request.frame_local_index = frames[frame].download_buffer_copy_regions.size(); + } + RDD::BufferCopyRegion region; region.src_offset = submit_from + p_offset; region.dst_offset = block_write_offset; @@ -775,7 +778,7 @@ Error RenderingDevice::buffer_get_data_async(RID p_buffer, const Callable &p_cal draw_graph.add_synchronization(); } - for (uint32_t i = flushed_copies; i < get_data_request.frame_local_count; i++) { + for (uint32_t i = 0; i < get_data_request.frame_local_count; i++) { uint32_t local_index = get_data_request.frame_local_index + i; draw_graph.add_buffer_get_data(buffer->driver_id, buffer->draw_tracker, frames[frame].download_buffer_staging_buffers[local_index], frames[frame].download_buffer_copy_regions[local_index]); } @@ -2098,7 +2101,6 @@ Error RenderingDevice::texture_get_data_async(RID p_texture, uint32_t p_layer, c uint32_t block_write_offset; uint32_t block_write_amount; StagingRequiredAction required_action; - uint32_t flushed_copies = 0; for (uint32_t i = 0; i < tex->mipmaps; i++) { uint32_t image_total = get_image_format_required_size(tex->format, tex->width, tex->height, tex->depth, i + 1, &w, &h, &d); uint32_t tight_mip_size = image_total - mipmap_offset; @@ -2119,17 +2121,21 @@ Error RenderingDevice::texture_get_data_async(RID p_texture, uint32_t p_layer, c Error err = _staging_buffer_allocate(download_staging_buffers, to_allocate, required_align, block_write_offset, block_write_amount, required_action, false); ERR_FAIL_COND_V(err, ERR_CANT_CREATE); - if ((get_data_request.frame_local_count > 0) && required_action == STAGING_REQUIRED_ACTION_FLUSH_AND_STALL_ALL) { - for (uint32_t j = flushed_copies; j < get_data_request.frame_local_count; j++) { + const bool flush_frames = (get_data_request.frame_local_count > 0) && required_action == STAGING_REQUIRED_ACTION_FLUSH_AND_STALL_ALL; + if (flush_frames) { + for (uint32_t j = 0; j < get_data_request.frame_local_count; j++) { uint32_t local_index = get_data_request.frame_local_index + j; draw_graph.add_texture_get_data(tex->driver_id, tex->draw_tracker, frames[frame].download_texture_staging_buffers[local_index], frames[frame].download_buffer_texture_copy_regions[local_index]); } - - flushed_copies = get_data_request.frame_local_count; } _staging_buffer_execute_required_action(download_staging_buffers, required_action); + if (flush_frames) { + get_data_request.frame_local_count = 0; + get_data_request.frame_local_index = frames[frame].download_buffer_texture_copy_regions.size(); + } + RDD::BufferTextureCopyRegion copy_region; copy_region.buffer_offset = block_write_offset; copy_region.texture_subresources.aspect = tex->read_aspect_flags; @@ -2154,12 +2160,11 @@ Error RenderingDevice::texture_get_data_async(RID p_texture, uint32_t p_layer, c } if (get_data_request.frame_local_count > 0) { - for (uint32_t i = flushed_copies; i < get_data_request.frame_local_count; i++) { + for (uint32_t i = 0; i < get_data_request.frame_local_count; i++) { uint32_t local_index = get_data_request.frame_local_index + i; draw_graph.add_texture_get_data(tex->driver_id, tex->draw_tracker, frames[frame].download_texture_staging_buffers[local_index], frames[frame].download_buffer_texture_copy_regions[local_index]); } - flushed_copies = get_data_request.frame_local_count; frames[frame].download_texture_get_data_requests.push_back(get_data_request); } From 3be46a69c431519fbe4b6a5d39374585fd994802 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Tue, 4 Feb 2025 09:51:10 +0200 Subject: [PATCH 037/114] Fix uppercase B and X parsing in the integer literals. --- core/math/expression.cpp | 8 ++++---- editor/import/resource_importer_imagefont.cpp | 2 +- modules/gdscript/editor/gdscript_highlighter.cpp | 6 +++--- modules/gdscript/gdscript_tokenizer.cpp | 4 ++-- .../GodotSharp/Core/StringExtensions.cs | 2 +- scene/resources/syntax_highlighter.cpp | 4 ++-- tests/core/math/test_expression.h | 9 +++++++++ tests/core/string/test_string.h | 15 +++++++++------ 8 files changed, 31 insertions(+), 19 deletions(-) diff --git a/core/math/expression.cpp b/core/math/expression.cpp index b7fd26ae367..6d47fed1215 100644 --- a/core/math/expression.cpp +++ b/core/math/expression.cpp @@ -350,9 +350,9 @@ Error Expression::_get_token(Token &r_token) { case READING_INT: { if (is_digit(c)) { if (is_first_char && c == '0') { - if (next_char == 'b') { + if (next_char == 'b' || next_char == 'B') { reading = READING_BIN; - } else if (next_char == 'x') { + } else if (next_char == 'x' || next_char == 'X') { reading = READING_HEX; } } @@ -370,7 +370,7 @@ Error Expression::_get_token(Token &r_token) { case READING_BIN: { if (bin_beg && !is_binary_digit(c)) { reading = READING_DONE; - } else if (c == 'b') { + } else if (c == 'b' || c == 'B') { bin_beg = true; } @@ -378,7 +378,7 @@ Error Expression::_get_token(Token &r_token) { case READING_HEX: { if (hex_beg && !is_hex_digit(c)) { reading = READING_DONE; - } else if (c == 'x') { + } else if (c == 'x' || c == 'X') { hex_beg = true; } diff --git a/editor/import/resource_importer_imagefont.cpp b/editor/import/resource_importer_imagefont.cpp index e0a8cd924b7..741287ece31 100644 --- a/editor/import/resource_importer_imagefont.cpp +++ b/editor/import/resource_importer_imagefont.cpp @@ -159,7 +159,7 @@ Error ResourceImporterImageFont::import(ResourceUID::ID p_source_id, const Strin c++; // Skip "+". continue; } - } else if (range[c] == '0' && (c <= range.length() - 2) && range[c + 1] == 'x') { + } else if (range[c] == '0' && (c <= range.length() - 2) && (range[c + 1] == 'x' || range[c + 1] == 'X')) { // Read hexadecimal value, start. token = String(); if (step == STEP_START_BEGIN) { diff --git a/modules/gdscript/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp index 25e09504ce9..9d90c35736b 100644 --- a/modules/gdscript/editor/gdscript_highlighter.cpp +++ b/modules/gdscript/editor/gdscript_highlighter.cpp @@ -351,12 +351,12 @@ Dictionary GDScriptSyntaxHighlighter::_get_line_syntax_highlighting_impl(int p_l // Special cases for numbers. if (in_number && !is_a_digit) { - if (str[j] == 'b' && str[j - 1] == '0') { + if ((str[j] == 'b' || str[j] == 'B') && str[j - 1] == '0') { is_bin_notation = true; - } else if (str[j] == 'x' && str[j - 1] == '0') { + } else if ((str[j] == 'x' || str[j] == 'X') && str[j - 1] == '0') { is_hex_notation = true; } else if (!((str[j] == '-' || str[j] == '+') && str[j - 1] == 'e' && !prev_is_digit) && - !(str[j] == '_' && (prev_is_digit || str[j - 1] == 'b' || str[j - 1] == 'x' || str[j - 1] == '.')) && + !(str[j] == '_' && (prev_is_digit || str[j - 1] == 'b' || str[j - 1] == 'B' || str[j - 1] == 'x' || str[j - 1] == 'X' || str[j - 1] == '.')) && !(str[j] == 'e' && (prev_is_digit || str[j - 1] == '_')) && !(str[j] == '.' && (prev_is_digit || (!prev_is_binary_op && (j > 0 && (str[j - 1] == '_' || str[j - 1] == '-' || str[j - 1] == '+' || str[j - 1] == '~'))))) && !((str[j] == '-' || str[j] == '+' || str[j] == '~') && !is_binary_op && !prev_is_binary_op && str[j - 1] != 'e')) { diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index dd936cbe7ed..2bc4b703e20 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -696,13 +696,13 @@ GDScriptTokenizer::Token GDScriptTokenizerText::number() { if (_peek(-1) == '.') { has_decimal = true; } else if (_peek(-1) == '0') { - if (_peek() == 'x') { + if (_peek() == 'x' || _peek() == 'X') { // Hexadecimal. base = 16; digit_check_func = is_hex_digit; need_digits = true; _advance(); - } else if (_peek() == 'b') { + } else if (_peek() == 'b' || _peek() == 'B') { // Binary. base = 2; digit_check_func = is_binary_digit; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs index c79c45fa08c..0ca2307e3db 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs @@ -979,7 +979,7 @@ public static bool IsValidHexNumber(this string instance, bool withPrefix = fals { if (instance.Length < 3) return false; - if (instance[from] != '0' || instance[from + 1] != 'x') + if (instance[from] != '0' || instance[from + 1] != 'x' || instance[from + 1] != 'X') return false; from += 2; } diff --git a/scene/resources/syntax_highlighter.cpp b/scene/resources/syntax_highlighter.cpp index a2113a89e22..7905acfd0e4 100644 --- a/scene/resources/syntax_highlighter.cpp +++ b/scene/resources/syntax_highlighter.cpp @@ -302,12 +302,12 @@ Dictionary CodeHighlighter::_get_line_syntax_highlighting_impl(int p_line) { } // Check for dot or underscore or 'x' for hex notation in floating point number or 'e' for scientific notation. - if ((str[j] == '.' || str[j] == 'x' || str[j] == '_' || str[j] == 'f' || str[j] == 'e' || (uint_suffix_enabled && str[j] == 'u')) && !in_word && prev_is_number && !is_number) { + if ((str[j] == '.' || str[j] == 'x' || str[j] == 'X' || str[j] == '_' || str[j] == 'f' || str[j] == 'e' || (uint_suffix_enabled && str[j] == 'u')) && !in_word && prev_is_number && !is_number) { is_number = true; is_a_symbol = false; is_char = false; - if (str[j] == 'x' && str[j - 1] == '0') { + if ((str[j] == 'x' || str[j] == 'X') && str[j - 1] == '0') { is_hex_notation = true; } } diff --git a/tests/core/math/test_expression.h b/tests/core/math/test_expression.h index c3e42804919..8dbc5cae21a 100644 --- a/tests/core/math/test_expression.h +++ b/tests/core/math/test_expression.h @@ -213,6 +213,15 @@ TEST_CASE("[Expression] Underscored numeric literals") { CHECK_MESSAGE( expression.parse("0xff_99_00") == OK, "The expression should parse successfully."); + CHECK_MESSAGE( + expression.parse("0Xff_99_00") == OK, + "The expression should parse successfully."); + CHECK_MESSAGE( + expression.parse("0b10_11_00") == OK, + "The expression should parse successfully."); + CHECK_MESSAGE( + expression.parse("0B10_11_00") == OK, + "The expression should parse successfully."); } TEST_CASE("[Expression] Built-in functions") { diff --git a/tests/core/string/test_string.h b/tests/core/string/test_string.h index ea60230947d..479f448f24d 100644 --- a/tests/core/string/test_string.h +++ b/tests/core/string/test_string.h @@ -545,7 +545,10 @@ TEST_CASE("[String] String to integer") { CHECK(String(nums[i]).to_int() == num[i]); } CHECK(String("0b1011").to_int() == 1011); // Looks like a binary number, but to_int() handles this as a base-10 number, "b" is just ignored. + CHECK(String("0B1011").to_int() == 1011); + CHECK(String("0x1012").to_int() == 1012); // Looks like a hexadecimal number, but to_int() handles this as a base-10 number, "x" is just ignored. + CHECK(String("0X1012").to_int() == 1012); ERR_PRINT_OFF CHECK(String("999999999999999999999999999999999999999999999999999999999").to_int() == INT64_MAX); // Too large, largest possible is returned. @@ -554,10 +557,10 @@ TEST_CASE("[String] String to integer") { } TEST_CASE("[String] Hex to integer") { - static const char *nums[12] = { "0xFFAE", "22", "0", "AADDAD", "0x7FFFFFFFFFFFFFFF", "-0xf", "", "000", "000f", "0xaA", "-ff", "-" }; - static const int64_t num[12] = { 0xFFAE, 0x22, 0, 0xAADDAD, 0x7FFFFFFFFFFFFFFF, -0xf, 0, 0, 0xf, 0xaa, -0xff, 0x0 }; + static const char *nums[13] = { "0xFFAE", "22", "0", "AADDAD", "0x7FFFFFFFFFFFFFFF", "-0xf", "", "000", "000f", "0xaA", "-ff", "-", "0XFFAE" }; + static const int64_t num[13] = { 0xFFAE, 0x22, 0, 0xAADDAD, 0x7FFFFFFFFFFFFFFF, -0xf, 0, 0, 0xf, 0xaa, -0xff, 0x0, 0xFFAE }; - for (int i = 0; i < 12; i++) { + for (int i = 0; i < 13; i++) { CHECK(String(nums[i]).hex_to_int() == num[i]); } @@ -575,10 +578,10 @@ TEST_CASE("[String] Hex to integer") { } TEST_CASE("[String] Bin to integer") { - static const char *nums[10] = { "", "0", "0b0", "0b1", "0b", "1", "0b1010", "-0b11", "-1010", "0b0111111111111111111111111111111111111111111111111111111111111111" }; - static const int64_t num[10] = { 0, 0, 0, 1, 0, 1, 10, -3, -10, 0x7FFFFFFFFFFFFFFF }; + static const char *nums[11] = { "", "0", "0b0", "0b1", "0b", "1", "0b1010", "-0b11", "-1010", "0b0111111111111111111111111111111111111111111111111111111111111111", "0B1010" }; + static const int64_t num[11] = { 0, 0, 0, 1, 0, 1, 10, -3, -10, 0x7FFFFFFFFFFFFFFF, 10 }; - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 11; i++) { CHECK(String(nums[i]).bin_to_int() == num[i]); } From e34e1270621a69574b75ce4e392c2830fe15a171 Mon Sep 17 00:00:00 2001 From: Adam Scott Date: Wed, 5 Feb 2025 02:13:01 -0500 Subject: [PATCH 038/114] Add `XK_KP_{Decimal,Enter}` to `KeyMappingX11::is_sym_numpad()` --- platform/linuxbsd/wayland/key_mapping_xkb.cpp | 6 ++++-- platform/linuxbsd/x11/key_mapping_x11.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/platform/linuxbsd/wayland/key_mapping_xkb.cpp b/platform/linuxbsd/wayland/key_mapping_xkb.cpp index 7d3a4272f5a..04d8496c083 100644 --- a/platform/linuxbsd/wayland/key_mapping_xkb.cpp +++ b/platform/linuxbsd/wayland/key_mapping_xkb.cpp @@ -371,11 +371,13 @@ void KeyMappingXKB::initialize() { bool KeyMappingXKB::is_sym_numpad(xkb_keysym_t p_keysym) { switch (p_keysym) { + case XKB_KEY_KP_Equal: + case XKB_KEY_KP_Add: + case XKB_KEY_KP_Subtract: case XKB_KEY_KP_Multiply: case XKB_KEY_KP_Divide: - case XKB_KEY_KP_Subtract: case XKB_KEY_KP_Separator: - case XKB_KEY_KP_Add: + case XKB_KEY_KP_Decimal: case XKB_KEY_KP_0: case XKB_KEY_KP_1: case XKB_KEY_KP_2: diff --git a/platform/linuxbsd/x11/key_mapping_x11.cpp b/platform/linuxbsd/x11/key_mapping_x11.cpp index e6494985a4a..8a138f4bb47 100644 --- a/platform/linuxbsd/x11/key_mapping_x11.cpp +++ b/platform/linuxbsd/x11/key_mapping_x11.cpp @@ -1131,11 +1131,13 @@ void KeyMappingX11::initialize() { bool KeyMappingX11::is_sym_numpad(KeySym p_keysym) { switch (p_keysym) { + case XK_KP_Equal: + case XK_KP_Add: + case XK_KP_Subtract: case XK_KP_Multiply: case XK_KP_Divide: - case XK_KP_Subtract: case XK_KP_Separator: - case XK_KP_Add: + case XK_KP_Decimal: case XK_KP_0: case XK_KP_1: case XK_KP_2: From b50d9742c25392c5d24df1dd3ff300a7886b58e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Mon, 3 Feb 2025 19:35:10 +0200 Subject: [PATCH 039/114] Fix `is_valid_float`, `Variant` parser, `Expression` parser, script highlighter, and `TextServer` not handing capital E in scientific notation. --- core/math/expression.cpp | 4 +-- core/string/ustring.cpp | 9 ++--- core/variant/variant_parser.cpp | 6 ++-- .../gdscript/editor/gdscript_highlighter.cpp | 6 ++-- .../scripts/parser/features/constants.gd | 2 ++ modules/text_server_adv/text_server_adv.cpp | 34 ++++++++++++------- modules/text_server_adv/text_server_adv.h | 3 +- scene/resources/syntax_highlighter.cpp | 2 +- tests/core/math/test_expression.h | 3 ++ tests/core/string/test_string.h | 18 +++++----- 10 files changed, 52 insertions(+), 35 deletions(-) diff --git a/core/math/expression.cpp b/core/math/expression.cpp index 6d47fed1215..26b773a2242 100644 --- a/core/math/expression.cpp +++ b/core/math/expression.cpp @@ -359,7 +359,7 @@ Error Expression::_get_token(Token &r_token) { } else if (c == '.') { reading = READING_DEC; is_float = true; - } else if (c == 'e') { + } else if (c == 'e' || c == 'E') { reading = READING_EXP; is_float = true; } else { @@ -385,7 +385,7 @@ Error Expression::_get_token(Token &r_token) { } break; case READING_DEC: { if (is_digit(c)) { - } else if (c == 'e') { + } else if (c == 'e' || c == 'E') { reading = READING_EXP; } else { reading = READING_DONE; diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index c879cf99008..637394324e9 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -4964,17 +4964,18 @@ bool String::is_valid_float() const { bool numbers_found = false; for (int i = from; i < len; i++) { - if (is_digit(operator[](i))) { + const char32_t c = operator[](i); + if (is_digit(c)) { if (exponent_found) { exponent_values_found = true; } else { numbers_found = true; } - } else if (numbers_found && !exponent_found && operator[](i) == 'e') { + } else if (numbers_found && !exponent_found && (c == 'e' || c == 'E')) { exponent_found = true; - } else if (!period_found && !exponent_found && operator[](i) == '.') { + } else if (!period_found && !exponent_found && c == '.') { period_found = true; - } else if ((operator[](i) == '-' || operator[](i) == '+') && exponent_found && !exponent_values_found && !sign_found) { + } else if ((c == '-' || c == '+') && exponent_found && !exponent_values_found && !sign_found) { sign_found = true; } else { return false; // no start with number plz diff --git a/core/variant/variant_parser.cpp b/core/variant/variant_parser.cpp index 3ce242d49c9..00d2c2c8b35 100644 --- a/core/variant/variant_parser.cpp +++ b/core/variant/variant_parser.cpp @@ -441,7 +441,7 @@ Error VariantParser::get_token(Stream *p_stream, Token &r_token, int &line, Stri } else if (c == '.') { reading = READING_DEC; is_float = true; - } else if (c == 'e') { + } else if (c == 'e' || c == 'E') { reading = READING_EXP; is_float = true; } else { @@ -451,7 +451,7 @@ Error VariantParser::get_token(Stream *p_stream, Token &r_token, int &line, Stri } break; case READING_DEC: { if (is_digit(c)) { - } else if (c == 'e') { + } else if (c == 'e' || c == 'E') { reading = READING_EXP; } else { reading = READING_DONE; @@ -1962,7 +1962,7 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str case Variant::FLOAT: { String s = rtos_fix(p_variant.operator double()); if (s != "inf" && s != "inf_neg" && s != "nan") { - if (!s.contains_char('.') && !s.contains_char('e')) { + if (!s.contains_char('.') && !s.contains_char('e') && !s.contains_char('E')) { s += ".0"; } } diff --git a/modules/gdscript/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp index 9d90c35736b..acb74c1a6dc 100644 --- a/modules/gdscript/editor/gdscript_highlighter.cpp +++ b/modules/gdscript/editor/gdscript_highlighter.cpp @@ -355,11 +355,11 @@ Dictionary GDScriptSyntaxHighlighter::_get_line_syntax_highlighting_impl(int p_l is_bin_notation = true; } else if ((str[j] == 'x' || str[j] == 'X') && str[j - 1] == '0') { is_hex_notation = true; - } else if (!((str[j] == '-' || str[j] == '+') && str[j - 1] == 'e' && !prev_is_digit) && + } else if (!((str[j] == '-' || str[j] == '+') && (str[j - 1] == 'e' || str[j - 1] == 'E') && !prev_is_digit) && !(str[j] == '_' && (prev_is_digit || str[j - 1] == 'b' || str[j - 1] == 'B' || str[j - 1] == 'x' || str[j - 1] == 'X' || str[j - 1] == '.')) && - !(str[j] == 'e' && (prev_is_digit || str[j - 1] == '_')) && + !((str[j] == 'e' || str[j] == 'E') && (prev_is_digit || str[j - 1] == '_')) && !(str[j] == '.' && (prev_is_digit || (!prev_is_binary_op && (j > 0 && (str[j - 1] == '_' || str[j - 1] == '-' || str[j - 1] == '+' || str[j - 1] == '~'))))) && - !((str[j] == '-' || str[j] == '+' || str[j] == '~') && !is_binary_op && !prev_is_binary_op && str[j - 1] != 'e')) { + !((str[j] == '-' || str[j] == '+' || str[j] == '~') && !is_binary_op && !prev_is_binary_op && str[j - 1] != 'e' && str[j - 1] != 'E')) { /* This condition continues number highlighting in special cases. 1st row: '+' or '-' after scientific notation (like 3e-4); 2nd row: '_' as a numeric separator; diff --git a/modules/gdscript/tests/scripts/parser/features/constants.gd b/modules/gdscript/tests/scripts/parser/features/constants.gd index 013c9c074f1..62600eea441 100644 --- a/modules/gdscript/tests/scripts/parser/features/constants.gd +++ b/modules/gdscript/tests/scripts/parser/features/constants.gd @@ -4,6 +4,8 @@ func test(): const _VECTOR = Vector2(5, 6) const _ARRAY = [] const _DICTIONARY = {"this": "dictionary"} + const _FLOAT1 = 1e2 + const _FLOAT2 = 1E2 # Create user constants from built-in constants. const _HELLO = PI + TAU diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index b6678986b07..527d2dce41f 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -6881,7 +6881,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { ar.lang.insert(StringName("sd_Arab_PK")); ar.digits = U"٠١٢٣٤٥٦٧٨٩٫"; ar.percent_sign = U"٪"; - ar.exp = U"اس"; + ar.exp_l = U"اس"; + ar.exp_u = U"اس"; num_systems.push_back(ar); } @@ -6912,7 +6913,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { pr.lang.insert(StringName("uz_Arab_AF")); pr.digits = U"۰۱۲۳۴۵۶۷۸۹٫"; pr.percent_sign = U"٪"; - pr.exp = U"اس"; + pr.exp_l = U"اس"; + pr.exp_u = U"اس"; num_systems.push_back(pr); } @@ -6930,7 +6932,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { bn.lang.insert(StringName("mni_Beng_IN")); bn.digits = U"০১২৩৪৫৬৭৮৯."; bn.percent_sign = U"%"; - bn.exp = U"e"; + bn.exp_l = U"e"; + bn.exp_u = U"E"; num_systems.push_back(bn); } @@ -6946,7 +6949,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { mr.lang.insert(StringName("sa_IN")); mr.digits = U"०१२३४५६७८९."; mr.percent_sign = U"%"; - mr.exp = U"e"; + mr.exp_l = U"e"; + mr.exp_u = U"E"; num_systems.push_back(mr); } @@ -6957,7 +6961,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { dz.lang.insert(StringName("dz_BT")); dz.digits = U"༠༡༢༣༤༥༦༧༨༩."; dz.percent_sign = U"%"; - dz.exp = U"e"; + dz.exp_l = U"e"; + dz.exp_u = U"E"; num_systems.push_back(dz); } @@ -6970,7 +6975,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { sat.lang.insert(StringName("sat_Olck_IN")); sat.digits = U"᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙."; sat.percent_sign = U"%"; - sat.exp = U"e"; + sat.exp_l = U"e"; + sat.exp_u = U"E"; num_systems.push_back(sat); } @@ -6981,7 +6987,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { my.lang.insert(StringName("my_MM")); my.digits = U"၀၁၂၃၄၅၆၇၈၉."; my.percent_sign = U"%"; - my.exp = U"e"; + my.exp_l = U"e"; + my.exp_u = U"E"; num_systems.push_back(my); } @@ -6993,7 +7000,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { ccp.lang.insert(StringName("ccp_IN")); ccp.digits = U"𑄶𑄷𑄸𑄹𑄺𑄻𑄼𑄽𑄾𑄿."; ccp.percent_sign = U"%"; - ccp.exp = U"e"; + ccp.exp_l = U"e"; + ccp.exp_u = U"E"; num_systems.push_back(ccp); } @@ -7015,7 +7023,8 @@ void TextServerAdvanced::_insert_num_systems_lang() { ff.lang.insert(StringName("ff_Adlm_SN")); ff.digits = U"𞥐𞥑𞥒𞥓𞥔𞥕𞥖𞥗𞥘𞥙."; ff.percent_sign = U"%"; - ff.exp = U"e"; + ff.exp_l = U"𞤉"; + ff.exp_u = U"𞤉"; num_systems.push_back(ff); } } @@ -7029,8 +7038,8 @@ String TextServerAdvanced::_format_number(const String &p_string, const String & if (num_systems[i].digits.is_empty()) { return p_string; } - res.replace("e", num_systems[i].exp); - res.replace("E", num_systems[i].exp); + res = res.replace("e", num_systems[i].exp_l); + res = res.replace("E", num_systems[i].exp_u); char32_t *data = res.ptrw(); for (int j = 0; j < res.length(); j++) { if (data[j] >= 0x30 && data[j] <= 0x39) { @@ -7054,7 +7063,8 @@ String TextServerAdvanced::_parse_number(const String &p_string, const String &p if (num_systems[i].digits.is_empty()) { return p_string; } - res.replace(num_systems[i].exp, "e"); + res = res.replace(num_systems[i].exp_l, "e"); + res = res.replace(num_systems[i].exp_u, "E"); char32_t *data = res.ptrw(); for (int j = 0; j < res.length(); j++) { if (data[j] == num_systems[i].digits[10]) { diff --git a/modules/text_server_adv/text_server_adv.h b/modules/text_server_adv/text_server_adv.h index ab37abc6f7e..6561667e80e 100644 --- a/modules/text_server_adv/text_server_adv.h +++ b/modules/text_server_adv/text_server_adv.h @@ -147,7 +147,8 @@ class TextServerAdvanced : public TextServerExtension { HashSet lang; String digits; String percent_sign; - String exp; + String exp_l; + String exp_u; }; Vector num_systems; diff --git a/scene/resources/syntax_highlighter.cpp b/scene/resources/syntax_highlighter.cpp index 7905acfd0e4..662bb3d60c9 100644 --- a/scene/resources/syntax_highlighter.cpp +++ b/scene/resources/syntax_highlighter.cpp @@ -302,7 +302,7 @@ Dictionary CodeHighlighter::_get_line_syntax_highlighting_impl(int p_line) { } // Check for dot or underscore or 'x' for hex notation in floating point number or 'e' for scientific notation. - if ((str[j] == '.' || str[j] == 'x' || str[j] == 'X' || str[j] == '_' || str[j] == 'f' || str[j] == 'e' || (uint_suffix_enabled && str[j] == 'u')) && !in_word && prev_is_number && !is_number) { + if ((str[j] == '.' || str[j] == 'x' || str[j] == 'X' || str[j] == '_' || str[j] == 'f' || str[j] == 'e' || str[j] == 'E' || (uint_suffix_enabled && str[j] == 'u')) && !in_word && prev_is_number && !is_number) { is_number = true; is_a_symbol = false; is_char = false; diff --git a/tests/core/math/test_expression.h b/tests/core/math/test_expression.h index 8dbc5cae21a..7f660697db0 100644 --- a/tests/core/math/test_expression.h +++ b/tests/core/math/test_expression.h @@ -181,6 +181,9 @@ TEST_CASE("[Expression] Scientific notation") { CHECK_MESSAGE( expression.parse("2.e5") == OK, "The expression should parse successfully."); + CHECK_MESSAGE( + expression.parse("2.E5") == OK, + "The expression should parse successfully."); CHECK_MESSAGE( double(expression.execute()) == doctest::Approx(200'000), "The expression should return the expected result."); diff --git a/tests/core/string/test_string.h b/tests/core/string/test_string.h index 479f448f24d..d0b1bf8448e 100644 --- a/tests/core/string/test_string.h +++ b/tests/core/string/test_string.h @@ -1888,15 +1888,15 @@ TEST_CASE("[String] Join") { } TEST_CASE("[String] Is_*") { - static const char *data[13] = { "-30", "100", "10.1", "10,1", "1e2", "1e-2", "1e2e3", "0xAB", "AB", "Test1", "1Test", "Test*1", "文字" }; - static bool isnum[13] = { true, true, true, false, false, false, false, false, false, false, false, false, false }; - static bool isint[13] = { true, true, false, false, false, false, false, false, false, false, false, false, false }; - static bool ishex[13] = { true, true, false, false, true, false, true, false, true, false, false, false, false }; - static bool ishex_p[13] = { false, false, false, false, false, false, false, true, false, false, false, false, false }; - static bool isflt[13] = { true, true, true, false, true, true, false, false, false, false, false, false, false }; - static bool isaid[13] = { false, false, false, false, false, false, false, false, true, true, false, false, false }; - static bool isuid[13] = { false, false, false, false, false, false, false, false, true, true, false, false, true }; - for (int i = 0; i < 12; i++) { + static const char *data[] = { "-30", "100", "10.1", "10,1", "1e2", "1e-2", "1e2e3", "0xAB", "AB", "Test1", "1Test", "Test*1", "文字", "1E2", "1E-2" }; + static bool isnum[] = { true, true, true, false, false, false, false, false, false, false, false, false, false, false, false }; + static bool isint[] = { true, true, false, false, false, false, false, false, false, false, false, false, false, false, false }; + static bool ishex[] = { true, true, false, false, true, false, true, false, true, false, false, false, false, true, false }; + static bool ishex_p[] = { false, false, false, false, false, false, false, true, false, false, false, false, false, false, false }; + static bool isflt[] = { true, true, true, false, true, true, false, false, false, false, false, false, false, true, true }; + static bool isaid[] = { false, false, false, false, false, false, false, false, true, true, false, false, false, false, false }; + static bool isuid[] = { false, false, false, false, false, false, false, false, true, true, false, false, true, false, false }; + for (unsigned int i = 0; i < sizeof(data) / sizeof(data[0]); i++) { String s = String::utf8(data[i]); CHECK(s.is_numeric() == isnum[i]); CHECK(s.is_valid_int() == isint[i]); From d53dbaf81a66fb78696dd08adb71375e50d505b5 Mon Sep 17 00:00:00 2001 From: Giganzo <158825920+Giganzo@users.noreply.github.com> Date: Wed, 5 Feb 2025 21:07:05 +0100 Subject: [PATCH 040/114] Hide EditorSpinSlider slider for VectorNI --- editor/editor_properties.cpp | 6 +++--- editor/editor_properties_vector.cpp | 3 ++- editor/editor_properties_vector.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 73f6c70f342..81af2da105d 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -3663,7 +3663,7 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ case Variant::VECTOR2I: { EditorPropertyVector2i *editor = memnew(EditorPropertyVector2i(p_wide)); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, 1, true); - editor->setup(hint.min, hint.max, 1, false, p_hint == PROPERTY_HINT_LINK, hint.suffix); + editor->setup(hint.min, hint.max, 1, false, p_hint == PROPERTY_HINT_LINK, hint.suffix, false, true); return editor; } break; @@ -3690,7 +3690,7 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ case Variant::VECTOR3I: { EditorPropertyVector3i *editor = memnew(EditorPropertyVector3i(p_wide)); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, 1, true); - editor->setup(hint.min, hint.max, 1, false, p_hint == PROPERTY_HINT_LINK, hint.suffix); + editor->setup(hint.min, hint.max, 1, false, p_hint == PROPERTY_HINT_LINK, hint.suffix, false, true); return editor; } break; @@ -3704,7 +3704,7 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ case Variant::VECTOR4I: { EditorPropertyVector4i *editor = memnew(EditorPropertyVector4i); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, 1, true); - editor->setup(hint.min, hint.max, 1, false, p_hint == PROPERTY_HINT_LINK, hint.suffix); + editor->setup(hint.min, hint.max, 1, false, p_hint == PROPERTY_HINT_LINK, hint.suffix, false, true); return editor; } break; diff --git a/editor/editor_properties_vector.cpp b/editor/editor_properties_vector.cpp index 9ff8bf674d8..0ec7cf518a4 100644 --- a/editor/editor_properties_vector.cpp +++ b/editor/editor_properties_vector.cpp @@ -153,7 +153,7 @@ void EditorPropertyVectorN::_notification(int p_what) { } } -void EditorPropertyVectorN::setup(double p_min, double p_max, double p_step, bool p_hide_slider, bool p_link, const String &p_suffix, bool p_radians_as_degrees) { +void EditorPropertyVectorN::setup(double p_min, double p_max, double p_step, bool p_hide_slider, bool p_link, const String &p_suffix, bool p_radians_as_degrees, bool p_is_int) { radians_as_degrees = p_radians_as_degrees; for (EditorSpinSlider *spin : spin_sliders) { @@ -164,6 +164,7 @@ void EditorPropertyVectorN::setup(double p_min, double p_max, double p_step, boo spin->set_allow_greater(true); spin->set_allow_lesser(true); spin->set_suffix(p_suffix); + spin->set_editing_integer(p_is_int); } if (!p_link) { diff --git a/editor/editor_properties_vector.h b/editor/editor_properties_vector.h index 009735ae3e7..32f1abe97f5 100644 --- a/editor/editor_properties_vector.h +++ b/editor/editor_properties_vector.h @@ -62,7 +62,7 @@ class EditorPropertyVectorN : public EditorProperty { public: virtual void update_property() override; - void setup(double p_min, double p_max, double p_step = 1.0, bool p_hide_slider = true, bool p_link = false, const String &p_suffix = String(), bool p_radians_as_degrees = false); + void setup(double p_min, double p_max, double p_step = 1.0, bool p_hide_slider = true, bool p_link = false, const String &p_suffix = String(), bool p_radians_as_degrees = false, bool p_is_int = false); EditorPropertyVectorN(Variant::Type p_type, bool p_force_wide, bool p_horizontal); }; From e1af7b65b28087f9251eda03a3327e1313c9b51d Mon Sep 17 00:00:00 2001 From: clayjohn Date: Fri, 3 Jan 2025 15:20:04 -0800 Subject: [PATCH 041/114] Add explicit error messages to Multimesh error functions to make errors easier to understand. Previously the RenderingServer errors filtered up to end users, but they are unclear and not helpful --- scene/resources/multimesh.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/scene/resources/multimesh.cpp b/scene/resources/multimesh.cpp index 991a75d6d83..caf128c07b3 100644 --- a/scene/resources/multimesh.cpp +++ b/scene/resources/multimesh.cpp @@ -198,6 +198,12 @@ void MultiMesh::set_buffer(const Vector &p_buffer) { if (instance_count == 0) { return; } + + uint32_t stride = transform_format == TRANSFORM_2D ? 8 : 12; + stride += use_colors ? 4 : 0; + stride += use_custom_data ? 4 : 0; + ERR_FAIL_COND_MSG(stride * instance_count != p_buffer.size(), "Cannot set a buffer on a Multimesh that is a different size from the Multimesh's existing buffer."); + RS::get_singleton()->multimesh_set_buffer(multimesh, p_buffer); } @@ -249,39 +255,56 @@ void MultiMesh::set_physics_interpolation_quality(PhysicsInterpolationQuality p_ } void MultiMesh::set_instance_transform(int p_instance, const Transform3D &p_transform) { + ERR_FAIL_INDEX_MSG(p_instance, instance_count, "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_MSG(transform_format == TRANSFORM_2D, "Can't set Transform3D on a Multimesh configured to use Transform2D. Ensure that you have set the `transform_format` to `TRANSFORM_3D`."); RenderingServer::get_singleton()->multimesh_instance_set_transform(multimesh, p_instance, p_transform); } void MultiMesh::set_instance_transform_2d(int p_instance, const Transform2D &p_transform) { + ERR_FAIL_INDEX_MSG(p_instance, instance_count, "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_MSG(transform_format == TRANSFORM_3D, "Can't set Transform2D on a Multimesh configured to use Transform3D. Ensure that you have set the `transform_format` to `TRANSFORM_2D`."); RenderingServer::get_singleton()->multimesh_instance_set_transform_2d(multimesh, p_instance, p_transform); emit_changed(); } Transform3D MultiMesh::get_instance_transform(int p_instance) const { + ERR_FAIL_INDEX_V_MSG(p_instance, instance_count, Transform3D(), "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_V_MSG(transform_format == TRANSFORM_2D, Transform3D(), "Can't get Transform3D on a Multimesh configured to use Transform2D. Ensure that you have set the `transform_format` to `TRANSFORM_3D`."); return RenderingServer::get_singleton()->multimesh_instance_get_transform(multimesh, p_instance); } Transform2D MultiMesh::get_instance_transform_2d(int p_instance) const { + ERR_FAIL_INDEX_V_MSG(p_instance, instance_count, Transform2D(), "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_V_MSG(transform_format == TRANSFORM_3D, Transform2D(), "Can't get Transform2D on a Multimesh configured to use Transform3D. Ensure that you have set the `transform_format` to `TRANSFORM_2D`."); return RenderingServer::get_singleton()->multimesh_instance_get_transform_2d(multimesh, p_instance); } void MultiMesh::set_instance_color(int p_instance, const Color &p_color) { + ERR_FAIL_INDEX_MSG(p_instance, instance_count, "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_MSG(!use_colors, "Can't set instance color on a Multimesh that isn't using colors. Ensure that you have `use_colors` property of this Multimesh set to `true`."); RenderingServer::get_singleton()->multimesh_instance_set_color(multimesh, p_instance, p_color); } Color MultiMesh::get_instance_color(int p_instance) const { + ERR_FAIL_INDEX_V_MSG(p_instance, instance_count, Color(), "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_V_MSG(!use_colors, Color(), "Can't get instance color on a Multimesh that isn't using colors. Ensure that you have `use_colors` property of this Multimesh set to `true`."); return RenderingServer::get_singleton()->multimesh_instance_get_color(multimesh, p_instance); } void MultiMesh::set_instance_custom_data(int p_instance, const Color &p_custom_data) { + ERR_FAIL_INDEX_MSG(p_instance, instance_count, "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_MSG(!use_custom_data, "Can't get instance custom data on a Multimesh that isn't using custom data. Ensure that you have `use_custom_data` property of this Multimesh set to `true`."); RenderingServer::get_singleton()->multimesh_instance_set_custom_data(multimesh, p_instance, p_custom_data); } Color MultiMesh::get_instance_custom_data(int p_instance) const { + ERR_FAIL_INDEX_V_MSG(p_instance, instance_count, Color(), "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); + ERR_FAIL_COND_V_MSG(!use_custom_data, Color(), "Can't get instance custom data on a Multimesh that isn't using custom data. Ensure that you have `use_custom_data` property of this Multimesh set to `true`."); return RenderingServer::get_singleton()->multimesh_instance_get_custom_data(multimesh, p_instance); } void MultiMesh::reset_instance_physics_interpolation(int p_instance) { + ERR_FAIL_INDEX_MSG(p_instance, instance_count, "Instance index out of bounds. Instance index must be less than `instance_count` and greater than or equal to zero."); RenderingServer::get_singleton()->multimesh_instance_reset_physics_interpolation(multimesh, p_instance); } @@ -308,7 +331,7 @@ RID MultiMesh::get_rid() const { } void MultiMesh::set_use_colors(bool p_enable) { - ERR_FAIL_COND(instance_count > 0); + ERR_FAIL_COND_MSG(instance_count > 0, "Instance count must be 0 to toggle whether colors are used."); use_colors = p_enable; } @@ -317,7 +340,7 @@ bool MultiMesh::is_using_colors() const { } void MultiMesh::set_use_custom_data(bool p_enable) { - ERR_FAIL_COND(instance_count > 0); + ERR_FAIL_COND_MSG(instance_count > 0, "Instance count must be 0 to toggle whether custom data is used."); use_custom_data = p_enable; } @@ -326,7 +349,7 @@ bool MultiMesh::is_using_custom_data() const { } void MultiMesh::set_transform_format(TransformFormat p_transform_format) { - ERR_FAIL_COND(instance_count > 0); + ERR_FAIL_COND_MSG(instance_count > 0, "Instance count must be 0 to change the transform format."); transform_format = p_transform_format; } From 91907a89f797fe0f4f99229d3c1d749d81f6ac31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 31 Jan 2025 10:58:38 +0100 Subject: [PATCH 042/114] Thirdparty: Harmonize patches to document downstream changes --- COPYRIGHT.txt | 20 +- misc/error_suppressions/ubsan.txt | 4 +- modules/enet/SCsub | 2 +- modules/noise/fastnoise_lite.h | 2 +- .../windows/gl_manager_windows_native.cpp | 2 +- thirdparty/README.md | 272 +- thirdparty/amd-fsr2/ffx_fsr2.cpp | 4 - thirdparty/amd-fsr2/ffx_fsr2.h | 3 - thirdparty/amd-fsr2/ffx_fsr2_private.h | 2 - thirdparty/amd-fsr2/ffx_types.h | 2 - .../amd-fsr2/patches/0001-build-fixes.patch | 136 + .../patches/0002-godot-fsr2-options.patch | 121 + .../amd-fsr2/patches/godot-changes.patch | Bin 21350 -> 0 bytes .../shaders/ffx_fsr2_accumulate_pass.glsl | 5 +- .../ffx_fsr2_autogen_reactive_pass.glsl | 2 +- .../shaders/ffx_fsr2_callbacks_glsl.h | 8 +- ...x_fsr2_compute_luminance_pyramid_pass.glsl | 2 +- .../shaders/ffx_fsr2_depth_clip_pass.glsl | 2 +- .../amd-fsr2/shaders/ffx_fsr2_lock_pass.glsl | 2 +- .../amd-fsr2/shaders/ffx_fsr2_rcas_pass.glsl | 2 +- ..._fsr2_reconstruct_previous_depth_pass.glsl | 2 +- .../shaders/ffx_fsr2_tcr_autogen_pass.glsl | 4 +- .../encoder/basisu_gpu_texture.cpp | 2 +- .../patches/0001-external-zstd-pr344.patch | 26 + ...al-jpgd.patch => 0002-external-jpgd.patch} | 4 +- ...yexr.patch => 0003-external-tinyexr.patch} | 2 +- ...oi.patch => 0004-remove-tinydds-qoi.patch} | 10 +- .../patches/basisu-pr344.patch | 43 - .../clipper2/include/clipper2/clipper.core.h | 16 +- ...ns.patch => 0001-disable-exceptions.patch} | 2 +- ...h => 0002-llvm-disable-int1280-math.patch} | 20 +- ...org.patch => 0001-revert-bc6h-reorg.patch} | 0 thirdparty/d3d12ma/D3D12MemAlloc.cpp | 6 - .../d3d12ma/patches/0001-mingw-support.patch | 45 + .../directx/D3D12TokenizedProgramFormat.hpp | 2627 ----------------- .../directx/d3dx12_check_feature_support.h | 2 +- .../directx/d3dx12_pipeline_state_stream.h | 4 - .../include/directx/d3dx12_root_signature.h | 16 +- .../patches/0001-mingw-pragma.patch | 25 + ...ad.diff => 0002-win7-8-dynamic-load.patch} | 30 +- .../common/algorithms/parallel_reduce.h | 12 +- .../embree/common/lexers/stringstream.cpp | 4 +- thirdparty/embree/common/simd/arm/sse2neon.h | 6 - thirdparty/embree/common/sys/alloc.cpp | 62 +- thirdparty/embree/common/sys/alloc.h | 4 +- thirdparty/embree/common/sys/platform.h | 12 +- thirdparty/embree/common/sys/sysinfo.cpp | 21 +- .../common/tasking/taskschedulerinternal.cpp | 14 +- .../common/tasking/taskschedulerinternal.h | 12 +- .../embree/kernels/bvh/bvh_statistics.cpp | 4 +- thirdparty/embree/kernels/common/alloc.h | 12 +- thirdparty/embree/kernels/common/rtcore.cpp | 22 +- thirdparty/embree/kernels/common/rtcore.h | 20 +- thirdparty/embree/kernels/common/scene.cpp | 18 +- thirdparty/embree/kernels/common/state.cpp | 14 +- ...pt.patch => 0001-disable-exceptions.patch} | 298 +- ...-changes.patch => 0002-godot-config.patch} | 0 .../patches/0003-emscripten-nthreads.patch | 32 + ...idex.patch => 0004-mingw-no-cpuidex.patch} | 2 +- ...arm64.diff => 0005-mingw-llvm-arm64.patch} | 42 +- ...tch => 0006-include-order-dllexport.patch} | 0 .../embree/patches/emscripten-nthreads.patch | 42 - thirdparty/enet/enet/enet.h | 10 +- .../enet/enet/{godot.h => enet_godot.h} | 4 +- thirdparty/enet/enet/enet_godot_ext.h | 53 + thirdparty/enet/enet/godot_ext.h | 18 - thirdparty/enet/{godot.cpp => enet_godot.cpp} | 4 +- ...t_socket.patch => 0001-godot-socket.patch} | 18 +- ..._remove.patch => 0001-remove-bc7enc.patch} | 0 ...iff => 0001-enable-both-gl-and-gles.patch} | 4 +- ...> 0001-apple-disable-absolute-paths.patch} | 2 +- ...c15.patch => 0002-gcc15-include-fix.patch} | 0 ...fix.patch => 0001-clang-fortify-fix.patch} | 0 ...iles.diff => 0001-big-files-support.patch} | 17 +- thirdparty/libbacktrace/read.c | 9 +- .../libktx/patches/0001-external-basisu.patch | 30 + ...atch => 0002-disable-astc-block-ext.patch} | 30 - ...atch => 0001-msvc-node-debug-rename.patch} | 10 +- ...x.patch => 0002-msvc-arm64-fpstrict.patch} | 6 +- ...x.patch => 0003-clang-cl-sse2-sse41.patch} | 0 thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c | 2 - thirdparty/libwebp/src/enc/quant_enc.c | 2 - thirdparty/linuxbsd_headers/README.md | 5 +- .../patches/0001-musl-standard-poll.patch | 13 + ...ian.diff => 0002-freebsd-sys-endian.patch} | 0 .../alsa/patches/use-standard-poll-h.diff | 11 - ...=> 0001-msvc-2019-psa-redeclaration.patch} | 0 ...0001-simplifier-distance-only-error.patch} | 0 .../0001-disable-exceptions.patch} | 57 +- .../0002-clang-std-replacements-leak.patch | 65 + thirdparty/minimp3/minimp3.h | 14 +- ...msvc-arm-fix.patch => 0001-msvc-arm.patch} | 20 +- ...s-fixes.patch => 0002-msvc-warnings.patch} | 0 thirdparty/minizip/ioapi.c | 11 +- thirdparty/minizip/ioapi.h | 4 - ...godot-seek.patch => 0001-godot-seek.patch} | 97 +- thirdparty/minizip/unzip.c | 29 +- thirdparty/minizip/unzip.h | 4 - thirdparty/minizip/zip.c | 4 - thirdparty/{noise => misc}/FastNoiseLite.h | 0 thirdparty/misc/ifaddrs-android.h | 10 +- thirdparty/{nvapi => misc}/nvapi_minimal.h | 0 ...stNoiseLite-0001-namespace-warnings.patch} | 6 +- ...ifaddrs-android-0001-complete-struct.patch | 32 + ...h => polypartition-0001-godot-types.patch} | 22 +- ...> polypartition-0002-shadow-warning.patch} | 0 .../smaz-0001-write-string-warning.patch | 54 + thirdparty/noise/LICENSE | 22 - ...egl-from-glad.diff => 0001-glad-egl.patch} | 7 +- ...ch => 0001-specialization-constants.patch} | 20 +- ... 0002-zero-size-for-sc-sized-arrays.patch} | 6 +- thirdparty/spirv-reflect/spirv_reflect.c | 6 - thirdparty/spirv-reflect/spirv_reflect.h | 4 - ...01-revert-tvglines-bezier-precision.patch} | 0 ...c15.patch => 0002-gcc15-include-fix.patch} | 0 .../tinyexr/patches/0001-external-zlib.patch | 12 + thirdparty/tinyexr/tinyexr.cc | 2 - thirdparty/vhacd/inc/btAlignedAllocator.h | 4 - thirdparty/vhacd/inc/btAlignedObjectArray.h | 4 - thirdparty/vhacd/inc/btConvexHullComputer.h | 4 - thirdparty/vhacd/inc/btMinMax.h | 4 - thirdparty/vhacd/inc/btScalar.h | 12 - thirdparty/vhacd/inc/btVector3.h | 4 - thirdparty/vhacd/inc/vhacdICHull.h | 2 - thirdparty/vhacd/inc/vhacdManifoldMesh.h | 2 - thirdparty/vhacd/inc/vhacdMutex.h | 2 - .../{ => patches}/0001-bullet-namespace.patch | 86 +- .../{ => patches}/0002-fpermissive-fix.patch | 16 +- .../{ => patches}/0003-fix-musl-build.patch | 6 +- .../0004-fix-msvc-arm-build.patch} | 6 +- .../0005-fix-scale-calculation.patch | 0 .../0006-gcc13-include-fix.patch} | 19 +- thirdparty/vhacd/src/btAlignedAllocator.cpp | 6 - thirdparty/vhacd/src/btConvexHullComputer.cpp | 4 - ...001-VKEnumStringHelper-godot-vulkan.patch} | 0 ...lkan.patch => 0002-VMA-godot-vulkan.patch} | 0 ...add-vmaCalculateLazilyAllocatedBytes.patch | 10 +- thirdparty/vulkan/vk_mem_alloc.h | 4 - .../wslay/patches/0001-msvc-build-fix.patch | 16 + thirdparty/wslay/patches/msvcfix.diff | 18 - thirdparty/wslay/wslay/wslay.h | 2 - 141 files changed, 1272 insertions(+), 3847 deletions(-) create mode 100644 thirdparty/amd-fsr2/patches/0001-build-fixes.patch create mode 100644 thirdparty/amd-fsr2/patches/0002-godot-fsr2-options.patch delete mode 100644 thirdparty/amd-fsr2/patches/godot-changes.patch create mode 100644 thirdparty/basis_universal/patches/0001-external-zstd-pr344.patch rename thirdparty/basis_universal/patches/{external-jpgd.patch => 0002-external-jpgd.patch} (90%) rename thirdparty/basis_universal/patches/{external-tinyexr.patch => 0003-external-tinyexr.patch} (95%) rename thirdparty/basis_universal/patches/{remove-tinydds-qoi.patch => 0004-remove-tinydds-qoi.patch} (98%) delete mode 100644 thirdparty/basis_universal/patches/basisu-pr344.patch rename thirdparty/clipper2/patches/{clipper2-exceptions.patch => 0001-disable-exceptions.patch} (97%) rename thirdparty/clipper2/patches/{llvm-error.patch => 0002-llvm-disable-int1280-math.patch} (66%) rename thirdparty/cvtt/patches/{revert_BC6H_reorg.patch => 0001-revert-bc6h-reorg.patch} (100%) create mode 100644 thirdparty/d3d12ma/patches/0001-mingw-support.patch delete mode 100644 thirdparty/directx_headers/include/directx/D3D12TokenizedProgramFormat.hpp create mode 100644 thirdparty/directx_headers/patches/0001-mingw-pragma.patch rename thirdparty/directx_headers/patches/{patch_d3d12_dynamic_load.diff => 0002-win7-8-dynamic-load.patch} (80%) rename thirdparty/embree/patches/{godot-changes-noexcept.patch => 0001-disable-exceptions.patch} (65%) rename thirdparty/embree/patches/{godot-config-changes.patch => 0002-godot-config.patch} (100%) create mode 100644 thirdparty/embree/patches/0003-emscripten-nthreads.patch rename thirdparty/embree/patches/{mingw-no-cpuidex.patch => 0004-mingw-no-cpuidex.patch} (92%) rename thirdparty/embree/patches/{mingw-llvm-arm64.diff => 0005-mingw-llvm-arm64.patch} (69%) rename thirdparty/embree/patches/{include-order-dllexport-fix.patch => 0006-include-order-dllexport.patch} (100%) delete mode 100644 thirdparty/embree/patches/emscripten-nthreads.patch rename thirdparty/enet/enet/{godot.h => enet_godot.h} (97%) create mode 100644 thirdparty/enet/enet/enet_godot_ext.h delete mode 100644 thirdparty/enet/enet/godot_ext.h rename thirdparty/enet/{godot.cpp => enet_godot.cpp} (99%) rename thirdparty/enet/patches/{godot_socket.patch => 0001-godot-socket.patch} (88%) rename thirdparty/etcpak/patches/{bc7e_remove.patch => 0001-remove-bc7enc.patch} (100%) rename thirdparty/glad/patches/{patch_enable_both_gl_and_gles.diff => 0001-enable-both-gl-and-gles.patch} (96%) rename thirdparty/glslang/patches/{disable-absolute-paths-for-apple-compat.patch => 0001-apple-disable-absolute-paths.patch} (96%) rename thirdparty/glslang/patches/{fix-build-gcc15.patch => 0002-gcc15-include-fix.patch} (100%) rename thirdparty/jpeg-compressor/patches/{clang-fortify-fix.patch => 0001-clang-fortify-fix.patch} (100%) rename thirdparty/libbacktrace/patches/{patch_big_files.diff => 0001-big-files-support.patch} (71%) create mode 100644 thirdparty/libktx/patches/0001-external-basisu.patch rename thirdparty/libktx/patches/{godot.patch => 0002-disable-astc-block-ext.patch} (56%) rename thirdparty/libwebp/patches/{godot-node-debug-fix.patch => 0001-msvc-node-debug-rename.patch} (67%) rename thirdparty/libwebp/patches/{godot-msvc-arm64-fpstrict-fix.patch => 0002-msvc-arm64-fpstrict.patch} (80%) rename thirdparty/libwebp/patches/{godot-clang-cl-fix.patch => 0003-clang-cl-sse2-sse41.patch} (100%) create mode 100644 thirdparty/linuxbsd_headers/alsa/patches/0001-musl-standard-poll.patch rename thirdparty/linuxbsd_headers/alsa/patches/{freebsd_endian.diff => 0002-freebsd-sys-endian.patch} (100%) delete mode 100644 thirdparty/linuxbsd_headers/alsa/patches/use-standard-poll-h.diff rename thirdparty/mbedtls/patches/{msvc-redeclaration-bug.diff => 0001-msvc-2019-psa-redeclaration.patch} (100%) rename thirdparty/meshoptimizer/patches/{distance-only-metric.patch => 0001-simplifier-distance-only-error.patch} (100%) rename thirdparty/mingw-std-threads/{godot.patch => patches/0001-disable-exceptions.patch} (65%) create mode 100644 thirdparty/mingw-std-threads/patches/0002-clang-std-replacements-leak.patch rename thirdparty/minimp3/patches/{msvc-arm-fix.patch => 0001-msvc-arm.patch} (69%) rename thirdparty/minimp3/patches/{msvc-warnings-fixes.patch => 0002-msvc-warnings.patch} (100%) rename thirdparty/minizip/patches/{godot-seek.patch => 0001-godot-seek.patch} (80%) rename thirdparty/{noise => misc}/FastNoiseLite.h (100%) rename thirdparty/{nvapi => misc}/nvapi_minimal.h (100%) rename thirdparty/{noise/patches/namespace-warnings.patch => misc/patches/FastNoiseLite-0001-namespace-warnings.patch} (88%) create mode 100644 thirdparty/misc/patches/ifaddrs-android-0001-complete-struct.patch rename thirdparty/misc/patches/{polypartition-godot-types.patch => polypartition-0001-godot-types.patch} (98%) rename thirdparty/misc/patches/{polypartition-hole.patch => polypartition-0002-shadow-warning.patch} (100%) create mode 100644 thirdparty/misc/patches/smaz-0001-write-string-warning.patch delete mode 100644 thirdparty/noise/LICENSE rename thirdparty/openxr/patches/{use-egl-from-glad.diff => 0001-glad-egl.patch} (68%) rename thirdparty/spirv-reflect/patches/{1-specialization-constants.patch => 0001-specialization-constants.patch} (88%) rename thirdparty/spirv-reflect/patches/{2-zero-size-for-sc-sized-arrays.patch => 0002-zero-size-for-sc-sized-arrays.patch} (86%) rename thirdparty/thorvg/patches/{revert-tvgLines-bezier-precision-change.patch => 0001-revert-tvglines-bezier-precision.patch} (100%) rename thirdparty/thorvg/patches/{fix-build-gcc15.patch => 0002-gcc15-include-fix.patch} (100%) create mode 100644 thirdparty/tinyexr/patches/0001-external-zlib.patch rename thirdparty/vhacd/{ => patches}/0001-bullet-namespace.patch (69%) rename thirdparty/vhacd/{ => patches}/0002-fpermissive-fix.patch (82%) rename thirdparty/vhacd/{ => patches}/0003-fix-musl-build.patch (77%) rename thirdparty/vhacd/{0004-fix-uwp-arm-build.patch => patches/0004-fix-msvc-arm-build.patch} (82%) rename thirdparty/vhacd/{ => patches}/0005-fix-scale-calculation.patch (100%) rename thirdparty/vhacd/{0006-fix-gcc13.patch => patches/0006-gcc13-include-fix.patch} (66%) rename thirdparty/vulkan/patches/{VKEnumStringHelper-use-godot-vulkan.patch => 0001-VKEnumStringHelper-godot-vulkan.patch} (100%) rename thirdparty/vulkan/patches/{VMA-use-godot-vulkan.patch => 0002-VMA-godot-vulkan.patch} (100%) create mode 100644 thirdparty/wslay/patches/0001-msvc-build-fix.patch delete mode 100644 thirdparty/wslay/patches/msvcfix.diff diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index a7a09a553ba..34aa95edadc 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -411,6 +411,11 @@ Comment: FastLZ Copyright: 2005-2020, Ariya Hidayat License: Expat +Files: thirdparty/misc/FastNoiseLite.h +Comment: FastNoise Lite +Copyright: 2023, Jordan Peck and contributors +License: Expat + Files: thirdparty/misc/ifaddrs-android.cc thirdparty/misc/ifaddrs-android.h Comment: libjingle @@ -423,17 +428,17 @@ Comment: Tangent Space Normal Maps implementation Copyright: 2011, Morten S. Mikkelsen License: Zlib +Files: thirdparty/misc/nvapi_minimal.h +Comment: NVIDIA NVAPI (minimal excerpt) +Copyright: 2019-2022, NVIDIA Corporation +License: Expat + Files: thirdparty/misc/ok_color.h thirdparty/misc/ok_color_shader.h Comment: OK Lab color space Copyright: 2021, Björn Ottosson License: Expat -Files: thirdparty/noise/FastNoiseLite.h -Comment: FastNoise Lite -Copyright: 2023, Jordan Peck and contributors -License: Expat - Files: thirdparty/misc/pcg.cpp thirdparty/misc/pcg.h Comment: Minimal PCG32 implementation @@ -484,11 +489,6 @@ Comment: Multi-channel signed distance field generator Copyright: 2014-2024, Viktor Chlumsky License: Expat -Files: thirdparty/nvapi/nvapi_minimal.h -Comment: Stripped down version of "nvapi.h" from the NVIDIA NVAPI SDK -Copyright: 2019-2022, NVIDIA Corporation -License: Expat - Files: thirdparty/openxr/* Comment: OpenXR Loader Copyright: 2020-2023, The Khronos Group Inc. diff --git a/misc/error_suppressions/ubsan.txt b/misc/error_suppressions/ubsan.txt index 13e0ef05a1e..a6e63ade24e 100644 --- a/misc/error_suppressions/ubsan.txt +++ b/misc/error_suppressions/ubsan.txt @@ -57,7 +57,7 @@ nonnull-attribute:thirdparty/spirv-reflect/spirv_reflect.c pointer-overflow:thirdparty/libogg/framing.c shift-base:thirdparty/libogg/bitwise.c shift-base:thirdparty/libvorbis/sharedbook.c -shift-base:thirdparty/noise/FastNoiseLite.h +shift-base:thirdparty/misc/FastNoiseLite.h shift-base:thirdparty/tinyexr/tinyexr.h shift-exponent:thirdparty/misc/mikktspace.c -signed-integer-overflow:thirdparty/noise/FastNoiseLite.h +signed-integer-overflow:thirdparty/misc/FastNoiseLite.h diff --git a/modules/enet/SCsub b/modules/enet/SCsub index 0c31638e46b..af64f2be82a 100644 --- a/modules/enet/SCsub +++ b/modules/enet/SCsub @@ -13,7 +13,7 @@ thirdparty_obj = [] if env["builtin_enet"]: thirdparty_dir = "#thirdparty/enet/" thirdparty_sources = [ - "godot.cpp", + "enet_godot.cpp", "callbacks.c", "compress.c", "host.c", diff --git a/modules/noise/fastnoise_lite.h b/modules/noise/fastnoise_lite.h index fcf81fc2bb3..38876e6c4b3 100644 --- a/modules/noise/fastnoise_lite.h +++ b/modules/noise/fastnoise_lite.h @@ -33,7 +33,7 @@ #include "noise.h" -#include +#include "thirdparty/misc/FastNoiseLite.h" typedef fastnoiselite::FastNoiseLite _FastNoiseLite; diff --git a/platform/windows/gl_manager_windows_native.cpp b/platform/windows/gl_manager_windows_native.cpp index af703f4dfa9..7d2af4f95e6 100644 --- a/platform/windows/gl_manager_windows_native.cpp +++ b/platform/windows/gl_manager_windows_native.cpp @@ -35,7 +35,7 @@ #include "core/config/project_settings.h" #include "core/version.h" -#include "thirdparty/nvapi/nvapi_minimal.h" +#include "thirdparty/misc/nvapi_minimal.h" #include #include diff --git a/thirdparty/README.md b/thirdparty/README.md index 5c2ea489e2c..575d4d6135c 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -29,7 +29,10 @@ Files extracted from upstream source: - `shaders` folder from `src/ffx-fsr2-api` with `ffx_*.hlsl` files excluded - `LICENSE.txt` -Apply `patches` to add the new options required by Godot and general compilation fixes. +Patches: + +- `0001-build-fixes.patch` (GH-81197) +- `0002-godot-fsr2-options.patch` (GH-81197) ## angle @@ -68,8 +71,13 @@ Files extracted from upstream source: `jpgd.{cpp,h}`, `3rdparty/{qoi.h,tinydds.h,tinyexr.cpp,tinyexr.h}` - `LICENSE` -Applied upstream PR https://github.com/BinomialLLC/basis_universal/pull/344 to -fix build with our own copy of zstd (patch in `patches`). +Patches: + +- `0001-external-zstd-pr344.patch` (GH-73441) +- `0002-external-jpgd.patch` (GH-88508) +- `0003-external-tinyexr.patch` (GH-97582) +- `0004-remove-tinydds-qoi.patch` (GH-97582) + ## brotli @@ -107,8 +115,10 @@ Files extracted from upstream source: - `CPP/Clipper2Lib/` folder (in root) - `LICENSE` -Apply the patches in the `patches/` folder when syncing on newer upstream -commits. +Patches: + +- `0001-disable-exceptions.patch` (GH-80796) +- `0002-llvm-disable-int1280-math.patch` (GH-95964) ## cvtt @@ -122,10 +132,9 @@ Files extracted from upstream source: - All `.cpp` and `.h` files except the folders `MakeTables` and `etc2packer` - `LICENSE.txt` -Changes related to BC6H packing and unpacking made upstream in -https://github.com/elasota/cvtt/commit/2e4b6b2747aec11f4cc6dd09ef43fa8ce769f6e2 -have been removed as they caused massive quality regressions. Apply the patches -in the `patches/` folder when syncing on newer upstream commits. +Patches: + +- `0001-revert-bc6h-reorg.patch` (GH-73715) ## d3d12ma @@ -140,9 +149,9 @@ Files extracted from upstream source: - `include/D3D12MemAlloc.h` - `LICENSE.txt`, `NOTICES.txt` -Important: Some files have Godot-made changes for use with MinGW. -They are marked with `/* GODOT start */` and `/* GODOT end */` -comments. +Patches: + +- `0001-mingw-support.patch` (GH-83452) ## directx_headers @@ -157,9 +166,10 @@ Files extracted from upstream source: - `include/dxguids/*.h` - `LICENSE` -Important: Some files have Godot-made changes for use with MinGW. -They are marked with `/* GODOT start */` and `/* GODOT end */` -comments. +Patches: + +- `0001-mingw-pragma.patch` (GH-83452) +- `0002-win7-8-dynamic-load.patch` (GH-88496) ## doctest @@ -187,13 +197,17 @@ Files extracted from upstream: - All config files listed in `modules/raycast/godot_update_embree.py` - `LICENSE.txt` -The `modules/raycast/godot_update_embree.py` script can be used to pull the -relevant files from the latest Embree release and apply some automatic changes. +Patches: -Some changes have been made in order to remove exceptions and fix minor build errors. -They are marked with `// -- GODOT start --` and `// -- GODOT end --` -comments. Apply the patches in the `patches/` folder when syncing on newer upstream -commits. +- `0001-disable-exceptions.patch` (GH-48050) +- `0002-godot-config.patch` (GH-88783) +- `0003-emscripten-nthreads.patch` (GH-69799) +- `0004-mingw-no-cpuidex.patch` (GH-92488) +- `0005-mingw-llvm-arm64.patch` (GH-93364) +- `0006-include-order-dllexport.patch` (GH-94256) + +The `modules/raycast/godot_update_embree.py` script can be used to pull the +relevant files from the latest Embree release and apply patches automatically. ## enet @@ -207,17 +221,15 @@ Files extracted from upstream source: - All `.c` files in the main directory (except `unix.c` and `win32.c`) - The `include/enet/` folder as `enet/` (except `unix.h` and `win32.h`) - `LICENSE` file +- Added 3 files `enet_godot.cpp`, `enet/enet_godot.h`, and `enet/enet_godot_ext.h`, + providing ENet socket implementation using Godot classes, allowing IPv6 and DTLS. -Important: `enet.h`, `host.c`, `protocol.c` have been slightly modified -to be usable by Godot's socket implementation and allow IPv6 and DTLS. -Apply the patches in the `patches/` folder when syncing on newer upstream -commits. +Patches: -Three files (`godot.cpp`, `enet/godot.h`, `enet/godot_ext.h`) have been added to -provide ENet socket implementation using Godot classes. +- `0001-godot-socket.patch` (GH-7985) -It is still possible to build against a system wide ENet but doing so will limit -its functionality to IPv4 only. +Important: Building against a system wide ENet is possible, but will limit its +functionality to IPv4 only and no DTLS. We recommend against it. ## etcpak @@ -236,6 +248,11 @@ Files extracted from upstream source: - The files `DecodeRGB.{cpp.hpp}` are based on the code from the original repository. - `AUTHORS.txt` and `LICENSE.txt` +Patches: + +- `0001-remove-bc7enc.patch` (GH-101362) + + ## fonts - `DroidSans*.woff2`: @@ -340,11 +357,12 @@ Files generated from [upstream web instance](https://gen.glad.sh/): - `glx.c` - `glad/glx.h` -See the permalinks in `glad/gl.h` and `glad/glx.h` to regenrate the files with +See the permalinks in `glad/gl.h` and `glad/glx.h` to regenerate the files with a new version of the web instance. -Some changes have been made in order to allow loading OpenGL and OpenGLES APIs at the same time. -See the patches in the `patches` directory. +Patches: + +- `0001-enable-both-gl-and-gles.patch` (GH-72831) ## glslang @@ -366,6 +384,11 @@ Files extracted from upstream source: - `LICENSE.txt` - Unnecessary files like `CMakeLists.txt` or `updateGrammar` removed +Patches: + +- `0001-apple-disable-absolute-paths.patch` (GH-92010) +- `0002-gcc15-include-fix.patch` (GH-102022) + ## graphite @@ -445,6 +468,10 @@ Files extracted from upstream source: - `jpgd*.{c,h}` - `jpge*.{c,h}` +Patches: + +- `0001-clang-fortify-fix.patch` (GH-101927) + ## libbacktrace @@ -459,9 +486,9 @@ Files extracted from upstream source: * `elf.c`, `macho.c`, `mmap.c`, `mmapio.c`, `nounwind.c`, `unknown.c`, `xcoff.c` - `LICENSE` -Important: Some files have Godot-made changes to load big debug symbol files. -They are marked with `/* GODOT start */` and `/* GODOT end */` -comments and a patch is provided in the `patches` folder. +Patches: + +- `0001-big-files-support.patch` (GH-100281) ## libktx @@ -481,7 +508,10 @@ Files extracted from upstream source: - `other_include/KHR/` - `utils/unused.h` -Some Godot-specific changes are applied via patches included in the `patches` folder. +Patches: + +- `0001-external-basisu.patch` (GH-76572) +- `0002-disable-astc-block-ext.patch` (GH-76572) ## libogg @@ -549,8 +579,16 @@ Files extracted from upstream source: - `src/` and `sharpyuv/` except from `.am`, `.rc` and `.in` files - `AUTHORS`, `COPYING`, `PATENTS` -Patch `godot-node-debug-fix.patch` workarounds shadowing of Godot's Node class -in the MSVC debugger. +Patches: + +- `0001-msvc-node-debug-rename.patch` +- `0002-msvc-arm64-fpstrict.patch` +- `0003-clang-cl-sse2-sse41.patch` + + +## linuxbsd_headers + +See `linuxbsd_headers/README.md`. ## manifold @@ -581,13 +619,15 @@ File extracted from upstream release tarball: - Except `bignum_mod.c`, `block_cipher.c`, `ecp_curves_new.c`, `lmots.c`, `lms.c` - The `LICENSE` file (edited to keep only the Apache 2.0 variant) -- Applied the patch `msvc-redeclaration-bug.diff` to fix a compilation error - with some MSVC versions - Added 2 files `godot_core_mbedtls_platform.c` and `godot_core_mbedtls_config.h` providing configuration for light bundling with core - Added the file `godot_module_mbedtls_config.h` to customize the build configuration when bundling the full library +Patches: + +- `0001-msvc-2019-psa-redeclaration.patch` (GH-90535) + ## meshoptimizer @@ -600,8 +640,9 @@ Files extracted from upstream repository: - All files in `src/` - `LICENSE.md` -A patch is included to modify the simplifier to report only distance error -metrics instead of a combination of distance and attribute errors. +Patches: + +- `0001-simplifier-distance-only-error.patch` (GH-98529) ## mingw-std-threads @@ -619,8 +660,10 @@ Files extracted from upstream repository: - `mingw.shared_mutex.h` - `mingw.thread.h` -Once copied, apply `godot.patch` (needed because Godot is built without exceptions -and to avoid std:: replacements leak in Clang builds). +Patches: + +- `0001-disable-exceptions.patch` (GH-85039) +- `0002-clang-std-replacements-leak.patch` (GH-85208) ## minimp3 @@ -635,8 +678,10 @@ Files extracted from upstream repository: - `minimp3_ex.h` - `LICENSE` -Some changes have been made in order to fix Windows on ARM build errors, and -to solve some MSVC warnings. See the patches in the `patches` directory. +Patches: + +- `0001-msvc-arm.patch` (GH-64921) +- `0002-msvc-warnings.patch` (GH-66545) ## miniupnpc @@ -652,10 +697,8 @@ Files extracted from upstream source: - Remove the following test or sample files: `listdevices.c,minihttptestserver.c,miniupnpcmodule.c,upnpc.c,upnperrors.*,test*` - `LICENSE` - -The only modified file is `src/miniupnpcstrings.h`, which was created for Godot -(it is usually autogenerated by cmake). Bump the version number for miniupnpc in -that file when upgrading. +- `src/miniupnpcstrings.h` was created manually for Godot (it is usually generated + by CMake). Bump the version number for miniupnpc in that file when upgrading. ## minizip @@ -670,9 +713,9 @@ Files extracted from the upstream source: `{crypt.h,ioapi.{c,h},unzip.{c,h},zip.{c,h}}` `MiniZip64_info.txt` -Important: Some files have Godot-made changes for use in core/io. -They are marked with `/* GODOT start */` and `/* GODOT end */` -comments and a patch is provided in the `patches` folder. +Patches: + +- `0001-godot-seek.patch` (GH-10428) ## misc @@ -683,10 +726,6 @@ Collection of single-file libraries used in Godot components. * Upstream: https://github.com/iOrange/bcdec * Version: git (3b29f8f44466c7d59852670f82f53905cf627d48, 2024) * License: MIT -- `clipper.{cpp,hpp}` - * Upstream: https://sourceforge.net/projects/polyclipping - * Version: 6.4.2 (2017) + Godot changes (added optional exceptions handling) - * License: BSL-1.0 - `cubemap_coeffs.h` * Upstream: https://research.activision.com/publications/archives/fast-filtering-of-reflection-probes File coeffs_const_8.txt (retrieved April 2020) @@ -695,14 +734,27 @@ Collection of single-file libraries used in Godot components. * Upstream: https://github.com/ariya/FastLZ * Version: 0.5.0 (4f20f54d46f5a6dd4fae4def134933369b7602d2, 2020) * License: MIT +- `FastNoiseLite.h` + * Upstream: https://github.com/Auburn/FastNoiseLite + * Version: 1.1.0 (f7af54b56518aa659e1cf9fb103c0b6e36a833d9, 2023) + * License: MIT + * Patches: + - `FastNoiseLite-0001-namespace-warnings.patch` (GH-88526) - `ifaddrs-android.{cc,h}` * Upstream: https://chromium.googlesource.com/external/webrtc/stable/talk/+/master/base/ifaddrs-android.h * Version: git (5976650443d68ccfadf1dea24999ee459dd2819d, 2013) * License: BSD-3-Clause + * Patches: + - `ifaddrs-android-0001-complete-struct.patch` (GH-34101) - `mikktspace.{c,h}` * Upstream: https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/ * Version: 1.0 (2011) * License: zlib +- `nvapi_minimal.h` + * Upstream: http://download.nvidia.com/XFree86/nvapi-open-source-sdk + * Version: R525 + * License: MIT + * Modifications: Created from upstream `nvapi.h` by removing unnecessary code. - `ok_color.h` * Upstream: https://github.com/bottosson/bottosson.github.io/blob/master/misc/ok_color.h * Version: git (d69831edb90ffdcd08b7e64da3c5405acd48ad2c, 2022) @@ -719,13 +771,15 @@ Collection of single-file libraries used in Godot components. - `polypartition.{cpp,h}` * Upstream: https://github.com/ivanfratric/polypartition (`src/polypartition.{cpp,h}`) * Version: git (7bdffb428b2b19ad1c43aa44c714dcc104177e84, 2021) - * Modifications: Change from STL to Godot types (see provided patch). * License: MIT -- `qoa.h` + * Patches: + - `polypartition-0001-godot-types.patch` (2185c018f) + - `polypartition-0002-shadow-warning.patch` (GH-66808) +- `qoa.{c,h}` * Upstream: https://github.com/phoboslab/qoa * Version: git (a2d927f8ce78a85e903676a33e0f956e53b89f7d, 2024) - * Modifications: Added implementation through `qoa.c`. * License: MIT + * Modifications: Added implementation through `qoa.c`. - `r128.{c,h}` * Upstream: https://github.com/fahickman/r128 * Version: git (6fc177671c47640d5bb69af10cf4ee91050015a1, 2023) @@ -734,7 +788,9 @@ Collection of single-file libraries used in Godot components. * Upstream: https://github.com/antirez/smaz * Version: git (2f625846a775501fb69456567409a8b12f10ea25, 2012) * License: BSD-3-Clause - * Modifications: use `const char*` instead of `char*` for input string + * Modifications: License included in header. + * Patches: + - `smaz-0001-write-string-warning.patch` (GH-8572) - `smolv.{cpp,h}` * Upstream: https://github.com/aras-p/smol-v * Version: git (9dd54c379ac29fa148cb1b829bb939ba7381d8f4, 2024) @@ -762,31 +818,6 @@ Files extracted from the upstream source: - `LICENSE.txt` -## noise - -- Upstream: https://github.com/Auburn/FastNoiseLite -- Version: 1.1.0 (f7af54b56518aa659e1cf9fb103c0b6e36a833d9, 2023) -- License: MIT - -Files extracted from the upstream source: - -- `FastNoiseLite.h` -- `LICENSE` - -Some custom changes were made to fix compiler warnings, and can be re-applied -with the provided patch. - - -## nvapi - -- Upstream: http://download.nvidia.com/XFree86/nvapi-open-source-sdk -- Version: R525 -- License: MIT - -- `nvapi_minimal.h` was created by using `nvapi.h` from upstream and removing - unnecessary code. - - ## openxr - Upstream: https://github.com/KhronosGroup/OpenXR-SDK @@ -814,6 +845,10 @@ Exclude: `*.{def,expsym,in,json,map,pom,rc,txt}` - All dotfiles +Patches: + +- `0001-glad-egl.patch` (GH-98824) + ## pcre2 @@ -900,38 +935,42 @@ Files extracted from upstream source: - `include/` folder - `LICENSE` -Some downstream changes have been made and are identified by -`// -- GODOT begin --` and `// -- GODOT end --` comments. -They can be reapplied using the patches included in the `patches` -folder, in order. +Patches: +- `0001-specialization-constants.patch` (GH-50325) +- `0002-zero-size-for-sc-sized-arrays.patch` (GH-94985) -## tinyexr -- Upstream: https://github.com/syoyo/tinyexr -- Version: 1.0.9 (5fcb4dcb6e3abf96214b67e5c54db1ceec6a455c, 2024) -- License: BSD-3-Clause +## thorvg + +- Upstream: https://github.com/thorvg/thorvg +- Version: 0.15.8 (bd8c2fca7663a22fba7a339937cb60f2f6247a2e, 2025) +- License: MIT Files extracted from upstream source: -- `tinyexr.{cc,h}` +- See `thorvg/update-thorvg.sh` for extraction instructions. + Set the version number and run the script. -The `tinyexr.cc` file was modified to include `zlib.h` which we provide, -instead of `miniz.h` as an external dependency. +Patches: +- `0001-revert-tvglines-bezier-precision.patch` (GH-96658) +- `0002-gcc15-include-fix.patch` (GH-102022) -## thorvg -- Upstream: https://github.com/thorvg/thorvg -- Version: 0.15.8 (bd8c2fca7663a22fba7a339937cb60f2f6247a2e, 2025) -- License: MIT +## tinyexr + +- Upstream: https://github.com/syoyo/tinyexr +- Version: 1.0.9 (5fcb4dcb6e3abf96214b67e5c54db1ceec6a455c, 2024) +- License: BSD-3-Clause Files extracted from upstream source: -See `thorvg/update-thorvg.sh` for extraction instructions. Set the version -number and run the script. +- `tinyexr.{cc,h}` + +Patches: -Patches in the `patches/` directory should be re-applied after updating. +- `0001-external-zlib.patch` (GH-55115) ## ufbx @@ -957,10 +996,14 @@ Files extracted from upstream source: - From `src/VHACD_Lib/`: `inc`, `public` and `src` - `LICENSE` -Some downstream changes have been made and are identified by -`// -- GODOT start --` and `// -- GODOT end --` comments. -They can be reapplied using the patches included in the `vhacd` -folder. +Patches: + +- `0001-bullet-namespace.patch` (GH-27929) +- `0002-fpermissive-fix.patch` (GH-27929) +- `0003-fix-musl-build.patch` (GH-34250) +- `0004-fix-msvc-arm-build.patch` (GH-34331) +- `0005-fix-scale-calculation.patch` (GH-38506) +- `0006-gcc13-include-fix.patch` (GH-77949) ## volk @@ -1004,7 +1047,12 @@ SDK release: https://github.com/KhronosGroup/Vulkan-Utility-Libraries/blob/main/ Version: 3.1.0 (009ecd192c1289c7529bff248a16cfe896254816, 2024) `vk_mem_alloc.cpp` is a Godot file and should be preserved on updates. -Patches in the `patches` directory should be re-applied after updates. +Patches: + +- `0001-VKEnumStringHelper-godot-vulkan.patch` (GH-97510) +- `0002-VMA-godot-vulkan.patch` (GH-97510) +- `0003-VMA-add-vmaCalculateLazilyAllocatedBytes.patch` (GH-99257) + ## wayland @@ -1069,10 +1117,12 @@ File extracted from upstream release tarball: Contents might need tweaking for Godot, review diff - All `.c` and `.h` files from `lib/` - All `.h` in `lib/includes/wslay/` as `wslay/` -- `wslay/wslay.h` has a small Godot addition to fix MSVC build - See `patches/msvcfix.diff` - `COPYING` +Patches: + +- `0001-msvc-build-fix.patch` (GH-30263) + ## xatlas diff --git a/thirdparty/amd-fsr2/ffx_fsr2.cpp b/thirdparty/amd-fsr2/ffx_fsr2.cpp index 864f7f12942..ec571b9cd27 100644 --- a/thirdparty/amd-fsr2/ffx_fsr2.cpp +++ b/thirdparty/amd-fsr2/ffx_fsr2.cpp @@ -36,7 +36,6 @@ #pragma clang diagnostic ignored "-Wunused-variable" #endif -// -- GODOT start -- #ifndef _countof #define _countof(array) (sizeof(array) / sizeof(array[0])) #endif @@ -45,7 +44,6 @@ #include #define wcscpy_s wcscpy #endif -// -- GODOT end -- // max queued frames for descriptor management static const uint32_t FSR2_MAX_QUEUED_FRAMES = 16; @@ -954,9 +952,7 @@ static FfxErrorCode fsr2Dispatch(FfxFsr2Context_Private* context, const FfxFsr2D context->constants.lumaMipDimensions[0] = uint32_t(context->constants.maxRenderSize[0] / mipDiv); context->constants.lumaMipDimensions[1] = uint32_t(context->constants.maxRenderSize[1] / mipDiv); - // -- GODOT start -- memcpy(context->constants.reprojectionMatrix, params->reprojectionMatrix, sizeof(context->constants.reprojectionMatrix)); - // -- GODOT end -- // reactive mask bias const int32_t threadGroupWorkRegionDim = 8; diff --git a/thirdparty/amd-fsr2/ffx_fsr2.h b/thirdparty/amd-fsr2/ffx_fsr2.h index 7df3773cccb..dfcd4caf350 100644 --- a/thirdparty/amd-fsr2/ffx_fsr2.h +++ b/thirdparty/amd-fsr2/ffx_fsr2.h @@ -146,10 +146,7 @@ typedef struct FfxFsr2DispatchDescription { float autoReactiveScale; ///< A value to scale the reactive mask float autoReactiveMax; ///< A value to clamp the reactive mask - // -- GODOT start -- float reprojectionMatrix[16]; ///< The matrix used for reprojecting pixels with invalid motion vectors by using the depth. - // -- GODOT end -- - } FfxFsr2DispatchDescription; /// A structure encapsulating the parameters for automatic generation of a reactive mask diff --git a/thirdparty/amd-fsr2/ffx_fsr2_private.h b/thirdparty/amd-fsr2/ffx_fsr2_private.h index 0face069b60..8a9aec57788 100644 --- a/thirdparty/amd-fsr2/ffx_fsr2_private.h +++ b/thirdparty/amd-fsr2/ffx_fsr2_private.h @@ -45,10 +45,8 @@ typedef struct Fsr2Constants { float dynamicResChangeFactor; float viewSpaceToMetersFactor; - // -- GODOT start -- float pad; float reprojectionMatrix[16]; - // -- GODOT end -- } Fsr2Constants; struct FfxFsr2ContextDescription; diff --git a/thirdparty/amd-fsr2/ffx_types.h b/thirdparty/amd-fsr2/ffx_types.h index 8b65219b50e..f71b259cce9 100644 --- a/thirdparty/amd-fsr2/ffx_types.h +++ b/thirdparty/amd-fsr2/ffx_types.h @@ -22,9 +22,7 @@ #pragma once #include -// -- GODOT start -- #include -// -- GODOT end -- #if defined (FFX_GCC) /// FidelityFX exported functions diff --git a/thirdparty/amd-fsr2/patches/0001-build-fixes.patch b/thirdparty/amd-fsr2/patches/0001-build-fixes.patch new file mode 100644 index 00000000000..0cf64770e14 --- /dev/null +++ b/thirdparty/amd-fsr2/patches/0001-build-fixes.patch @@ -0,0 +1,136 @@ +diff --git a/thirdparty/amd-fsr2/ffx_fsr2.cpp b/thirdparty/amd-fsr2/ffx_fsr2.cpp +index 051018e437..3970aa7f5b 100644 +--- a/thirdparty/amd-fsr2/ffx_fsr2.cpp ++++ b/thirdparty/amd-fsr2/ffx_fsr2.cpp +@@ -36,6 +36,15 @@ + #pragma clang diagnostic ignored "-Wunused-variable" + #endif + ++#ifndef _countof ++#define _countof(array) (sizeof(array) / sizeof(array[0])) ++#endif ++ ++#ifndef _MSC_VER ++#include ++#define wcscpy_s wcscpy ++#endif ++ + // max queued frames for descriptor management + static const uint32_t FSR2_MAX_QUEUED_FRAMES = 16; + +diff --git a/thirdparty/amd-fsr2/ffx_types.h b/thirdparty/amd-fsr2/ffx_types.h +index 74edd192c4..f71b259cce 100644 +--- a/thirdparty/amd-fsr2/ffx_types.h ++++ b/thirdparty/amd-fsr2/ffx_types.h +@@ -22,6 +22,7 @@ + #pragma once + + #include ++#include + + #if defined (FFX_GCC) + /// FidelityFX exported functions +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl +index ebbe610ffa..31d68292d4 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_autogen_reactive_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_autogen_reactive_pass.glsl +index 7ae41cf0c1..3b86c17d4d 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_autogen_reactive_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_autogen_reactive_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.glsl +index 15186e3bb6..8439c4e9d4 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_compute_luminance_pyramid_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_depth_clip_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_depth_clip_pass.glsl +index fcb2b76528..45ec5bdb86 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_depth_clip_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_depth_clip_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_lock_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_lock_pass.glsl +index f7cad59c20..7c3a4c2740 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_lock_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_lock_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_rcas_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_rcas_pass.glsl +index f0823c2bc8..8b4ebc6afc 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_rcas_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_rcas_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.glsl +index 20e17eef8c..be4395aaed 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_reconstruct_previous_depth_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl +index bebca91099..7d6a66b8ac 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl +@@ -19,7 +19,7 @@ + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + +-#version 450 ++//#version 450 + + #extension GL_GOOGLE_include_directive : require + #extension GL_EXT_samplerless_texture_functions : require diff --git a/thirdparty/amd-fsr2/patches/0002-godot-fsr2-options.patch b/thirdparty/amd-fsr2/patches/0002-godot-fsr2-options.patch new file mode 100644 index 00000000000..dd98f0ece52 --- /dev/null +++ b/thirdparty/amd-fsr2/patches/0002-godot-fsr2-options.patch @@ -0,0 +1,121 @@ +diff --git a/thirdparty/amd-fsr2/ffx_fsr2.cpp b/thirdparty/amd-fsr2/ffx_fsr2.cpp +index 3970aa7f5b..ec571b9cd2 100644 +--- a/thirdparty/amd-fsr2/ffx_fsr2.cpp ++++ b/thirdparty/amd-fsr2/ffx_fsr2.cpp +@@ -952,6 +952,8 @@ static FfxErrorCode fsr2Dispatch(FfxFsr2Context_Private* context, const FfxFsr2D + context->constants.lumaMipDimensions[0] = uint32_t(context->constants.maxRenderSize[0] / mipDiv); + context->constants.lumaMipDimensions[1] = uint32_t(context->constants.maxRenderSize[1] / mipDiv); + ++ memcpy(context->constants.reprojectionMatrix, params->reprojectionMatrix, sizeof(context->constants.reprojectionMatrix)); ++ + // reactive mask bias + const int32_t threadGroupWorkRegionDim = 8; + const int32_t dispatchSrcX = (context->constants.renderSize[0] + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; +diff --git a/thirdparty/amd-fsr2/ffx_fsr2.h b/thirdparty/amd-fsr2/ffx_fsr2.h +index 2a1c74abb1..dfcd4caf35 100644 +--- a/thirdparty/amd-fsr2/ffx_fsr2.h ++++ b/thirdparty/amd-fsr2/ffx_fsr2.h +@@ -146,6 +146,7 @@ typedef struct FfxFsr2DispatchDescription { + float autoReactiveScale; ///< A value to scale the reactive mask + float autoReactiveMax; ///< A value to clamp the reactive mask + ++ float reprojectionMatrix[16]; ///< The matrix used for reprojecting pixels with invalid motion vectors by using the depth. + } FfxFsr2DispatchDescription; + + /// A structure encapsulating the parameters for automatic generation of a reactive mask +diff --git a/thirdparty/amd-fsr2/ffx_fsr2_private.h b/thirdparty/amd-fsr2/ffx_fsr2_private.h +index 6b5fbc5117..8a9aec5778 100644 +--- a/thirdparty/amd-fsr2/ffx_fsr2_private.h ++++ b/thirdparty/amd-fsr2/ffx_fsr2_private.h +@@ -44,6 +44,9 @@ typedef struct Fsr2Constants { + float deltaTime; + float dynamicResChangeFactor; + float viewSpaceToMetersFactor; ++ ++ float pad; ++ float reprojectionMatrix[16]; + } Fsr2Constants; + + struct FfxFsr2ContextDescription; +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl +index 31d68292d4..2e98c8a6c5 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_accumulate_pass.glsl +@@ -35,7 +35,7 @@ + #endif + #define FSR2_BIND_SRV_INTERNAL_UPSCALED 3 + #define FSR2_BIND_SRV_LOCK_STATUS 4 +-#define FSR2_BIND_SRV_INPUT_DEPTH_CLIP 5 ++//#define FSR2_BIND_SRV_INPUT_DEPTH_CLIP 5 + #define FSR2_BIND_SRV_PREPARED_INPUT_COLOR 6 + #define FSR2_BIND_SRV_LUMA_INSTABILITY 7 + #define FSR2_BIND_SRV_LANCZOS_LUT 8 +@@ -52,6 +52,10 @@ + + #define FSR2_BIND_CB_FSR2 18 + ++#if FFX_FSR2_OPTION_GODOT_DERIVE_INVALID_MOTION_VECTORS ++#define FSR2_BIND_SRV_INPUT_DEPTH 5 ++#endif ++ + #include "ffx_fsr2_callbacks_glsl.h" + #include "ffx_fsr2_common.h" + #include "ffx_fsr2_sample.h" +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_callbacks_glsl.h b/thirdparty/amd-fsr2/shaders/ffx_fsr2_callbacks_glsl.h +index 10da13fb81..b610037cc6 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_callbacks_glsl.h ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_callbacks_glsl.h +@@ -52,6 +52,9 @@ + FfxFloat32 fDeltaTime; + FfxFloat32 fDynamicResChangeFactor; + FfxFloat32 fViewSpaceToMetersFactor; ++ ++ FfxFloat32 fPad; ++ mat4 mReprojectionMatrix; + } cbFSR2; + #endif + +@@ -317,7 +320,11 @@ FfxFloat32 LoadInputDepth(FfxInt32x2 iPxPos) + #if defined(FSR2_BIND_SRV_REACTIVE_MASK) + FfxFloat32 LoadReactiveMask(FfxInt32x2 iPxPos) + { ++#if FFX_FSR2_OPTION_GODOT_REACTIVE_MASK_CLAMP ++ return min(texelFetch(r_reactive_mask, FfxInt32x2(iPxPos), 0).r, 0.9f); ++#else + return texelFetch(r_reactive_mask, FfxInt32x2(iPxPos), 0).r; ++#endif + } + #endif + +@@ -354,6 +361,16 @@ FfxFloat32x2 LoadInputMotionVector(FfxInt32x2 iPxDilatedMotionVectorPos) + { + FfxFloat32x2 fSrcMotionVector = texelFetch(r_input_motion_vectors, iPxDilatedMotionVectorPos, 0).xy; + ++#if FFX_FSR2_OPTION_GODOT_DERIVE_INVALID_MOTION_VECTORS ++ bool bInvalidMotionVector = all(lessThanEqual(fSrcMotionVector, vec2(-1.0f, -1.0f))); ++ if (bInvalidMotionVector) ++ { ++ FfxFloat32 fSrcDepth = LoadInputDepth(iPxDilatedMotionVectorPos); ++ FfxFloat32x2 fUv = (iPxDilatedMotionVectorPos + FfxFloat32(0.5)) / RenderSize(); ++ fSrcMotionVector = FFX_FSR2_OPTION_GODOT_DERIVE_INVALID_MOTION_VECTORS_FUNCTION(fUv, fSrcDepth, cbFSR2.mReprojectionMatrix); ++ } ++#endif ++ + FfxFloat32x2 fUvMotionVector = fSrcMotionVector * MotionVectorScale(); + + #if FFX_FSR2_OPTION_JITTERED_MOTION_VECTORS +diff --git a/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl b/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl +index 7d6a66b8ac..5c042c332a 100644 +--- a/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl ++++ b/thirdparty/amd-fsr2/shaders/ffx_fsr2_tcr_autogen_pass.glsl +@@ -40,6 +40,10 @@ + #define FSR2_BIND_CB_FSR2 11 + #define FSR2_BIND_CB_REACTIVE 12 + ++#if FFX_FSR2_OPTION_GODOT_DERIVE_INVALID_MOTION_VECTORS ++#define FSR2_BIND_SRV_INPUT_DEPTH 13 ++#endif ++ + #include "ffx_fsr2_callbacks_glsl.h" + #include "ffx_fsr2_common.h" + diff --git a/thirdparty/amd-fsr2/patches/godot-changes.patch b/thirdparty/amd-fsr2/patches/godot-changes.patch deleted file mode 100644 index 513d8a5a29530ba70954a7e4ad2f7b16da1e6845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21350 zcmeI4ZExGi5y$tf3-mh>cW-oc?D+Yi*B0m6ahf(xTwBStJrshhhuA&aab-JodbqFN z_W#?_iWDW9q)Z7toIpq-m&@Im*_r>&%r5oc|FqqO>*|Qyl8z6$y3={nJ=gEKu6nNR zZgkz#^=Fkf-IYp~^u(>o)>OjN53VsNS#~WwaidnwDrn`G?iZrsT77oZOXODErd!qb zs@qY?hFf>rZdu2U+tO86S6$s(bGy2Ve9aYqXT#AFJT6tlAMGvrqdHE%ao>o#C2_Uo zp6L^*eLG(jXOZrHGlzmp#QU2S~jd7|fGE*A&oX}XWxsoNL*@7)V`lBjj<$Kl>{5V_yDf9d+% z)4QzS-wkRGb4aaQeQv~2LuZkHE|dh>rD@BOz12&~-A2snqb=CcKPC5$|DX$9uS-`d zq4%!W67-1cme+_IKSn*>rG;yKKIkq_FnZR5je5{G#`apzgD3ZXH1DL#YvPcSLrL(& zUmdwU_ZOA^*}aoA`5fr#P zZ47iBioXZ7+tYzH?CTp&;oC6nK-Au9G@7E6@vDg%o;mE_=Lxt5k?ut6v6m3GL)ov? zlJOpDJR6jlG=^I{=<^h*7RT_jOVS!EG3nCpt?=$rGG!!=MC*+tcF`XTblv1`+HJB+ z%fD8z7t@v#Kg!6cr_nH53$0^cR|6V8$(F(xRnO0=taW<)SnJvRm>n(%@ycLckOG!+ zC8=ZMMWqi?gYqBUKXlg8$lKT+c})YSAEfD#*HrNEN}7Sb6n$sG>pm5AP49VrU8p@U;<@~+NWMbky;tT%P=eOs zIkZQ~xxbT*D8o2XHE*EygOH@Cobq@xkN-+zT%0$X!vY0{uoe;Jd+*_?N#%mv^JcT} zWTRV}#rq&hU?~ zq)lP=MbB(DX4c@jGg+GT%X36vLD#T7Jm+)aPM-geH6Q+{_9n5`;D?!3o7Busn70BF z-0KW`p?7TMMjYLXZzP)L#_|C886Dll8%#zE!KQ6AEaoIeAd15~iRDL}Mvfu!eJAZd zp539k`kAKTHSofZEgTS)J#FS0*CMnhXQC}>$fkHclZ44$5X&1 z_!q2<%)z9HH{3=VrLMe3-LBEvG$@ zXuuf}pXCEXUKX#2yx5`7-Mtj9?f3Jj#Fj?;p?WrS#jpD8>*8rV2%Eq>Y{0UQQ!o{sW);L@#*WuY{l;iY&j6P;GqZ`#VX`gYTm z+*YKI*c?{Y*7>@(sIE$|y_RUM!pf@UWfIG*mV#i-pwTn=VXUyk=dm@L2ESE4x~@8J zrMrBe==+s>qwjrPz0vVPXLXfv6)BVSN>_i-8Q(ATd+ML9>&~8@ro>ta_ur{TT*~SR z&(Y6;e)rsK-``8svYrh`jJnW9x(|yr%zBr!szJPh1%xPm!=o@Q*~}l?xn;D$fw=Zd z(a`X#J8$*VEv*__1q9e~xu`-(Rt^5xkrtzv~11El$B}>DRvdlc%Y!UhAR&-I?qNtEOdTaO~}- z;dS`f>vTg@q07f5DcPJr2FKpgj>SC|$M`TVfhH^$DPdzpj;#qOcrE@}*Rq~ZC4oJM zwjhDJ`)i?oW7@VSqF_%v@4LT=(^Js_MIhN^$Bw5U*bv@a@PvqGS#4WW%dr&&OV8Ka zeaVH@K3ff(jJnaM*d1Ur7|I!57R_|oIyIJV-c6vcAz7l$hW3Vuw&HD?exf_92-~Q? z*O)Wj=--i^jGvggO^^^W@-k1|1UWmZ(tcu?MMizl zFNB-JyF*y>C$DxXkBa#8dynhE&%*zW_Z*}>+VQP@)J#Es?%Mmf<(^K?GjZRu@jNX9 zZW*$MpD8UHKz3?YUTAq5uqVa^%O=~ptx;qj4l6BPd7v$w;gNO}^{r`)$@pygh;T!- zXXTMj#@DpG)5)j_Xd8Q{b5Hf>;Hl06eey84>UcM=zci|V6Kx^Os-jx*<~w~<0ZZ0| zIb@RBy0_^gxY?je5gw+4AVqo(Xff=Y;itvfcJqi9v?n91Cxz8pc1Q$op(~FiD{8ry<&MBYOrd{*@ILq>8#^<*4X*!mE#@TD?+sYU7+~{#7UoU_C)AGLTn#ra& z?R`b6OK!R)n+RTG$VQJwv&bXp%DQx8I}r_ARuh|x`gO+Z$!mFA@cv4Ez>OmCJFhXe z&KdT~anE+%Jb2x@keB+P4?9wAza^3NxV$1QguQ{IzAq8op7)-EuT7kFs)(1ppr+xE zQ_VOeJuTMd*-uo4@*nzoRZgb@zh&ZzY3YK+DOu+-XF5lD_TByY@SU@YS&C zLx11)H1-siP(LY)hSy=F!M-w+q~3~TzpS?Gd|Bw+RY}lgbdW4+$b>KW zUSldPr!#%(lJwxeqI-r8S)({=X+QQgEYGfN4{E%Bo17Cd>0@?fb~0*PN3xl)cK%*c zBu`HE{BeCf5P!CcPmVpSjbVEZhQ0O+{k>#1 z*NxLR_U{oFeT;L8-np+5>Q>N-Fm%X#PJ9Bl@C%0Axw zl{xlevyOw0NKVV%T3`-f4@}FKu_NAgud`Y_i`Ca^sKR%ElaL8p7eBi`GTrs@>aKVs z6Skr&dsl5u7H$#jtTJKMaXPKYwhH}7#x(P6nfbJQ#~6~m;>y0?pYpoyEKm#!H~)jx z3-;68%mk;3_M1i`-g)Tw{UE#gCPQyIdG=xPw!@CRwJl!<^q)=ktPC&H!J0A@gbc|X zP3CA)?rr#dp9sI7bd}7(k*>vg${Z2PX`_HdYz-g933Y6C!HebKz=s73l-ks11ng`;oTqJXa_x# z-tP4Gv(tMObd5tD{0`z7_TcWQ7f^>x3OkLs<~ zzw59H9o`%cdm*QfSH*iyBhs00i1&D#@_&ed$oPUt?0{ysBcB!3!CRUYB9-H2I+#PIJW(Z#J2n#DAh7fF8w5q(I2nF-fIU;g2bl_sO^dgd-fuIyldDV#Tp0y?{}lEh h6p>W&ZKtZ& gpu_images, bool cubemap_flag, bool use_srgb_format) - { + { return false; } diff --git a/thirdparty/basis_universal/patches/0001-external-zstd-pr344.patch b/thirdparty/basis_universal/patches/0001-external-zstd-pr344.patch new file mode 100644 index 00000000000..505d17c5f32 --- /dev/null +++ b/thirdparty/basis_universal/patches/0001-external-zstd-pr344.patch @@ -0,0 +1,26 @@ +diff --git a/thirdparty/basis_universal/encoder/basisu_comp.cpp b/thirdparty/basis_universal/encoder/basisu_comp.cpp +index f16e75bd46..81813257cd 100644 +--- a/thirdparty/basis_universal/encoder/basisu_comp.cpp ++++ b/thirdparty/basis_universal/encoder/basisu_comp.cpp +@@ -33,7 +33,7 @@ + #endif + + #if BASISD_SUPPORT_KTX2_ZSTD +-#include "../zstd/zstd.h" ++#include + #endif + + // Set to 1 to disable the mipPadding alignment workaround (which only seems to be needed when no key-values are written at all) +diff --git a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp +index ea994b0c4f..32018cd282 100644 +--- a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp ++++ b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp +@@ -164,7 +164,7 @@ + // If BASISD_SUPPORT_KTX2_ZSTD is 0, UASTC files compressed with Zstd cannot be loaded. + #if BASISD_SUPPORT_KTX2_ZSTD + // We only use two Zstd API's: ZSTD_decompress() and ZSTD_isError() +- #include "../zstd/zstd.h" ++ #include + #endif + #endif + diff --git a/thirdparty/basis_universal/patches/external-jpgd.patch b/thirdparty/basis_universal/patches/0002-external-jpgd.patch similarity index 90% rename from thirdparty/basis_universal/patches/external-jpgd.patch rename to thirdparty/basis_universal/patches/0002-external-jpgd.patch index 7a805d00cb7..bc2a61d150a 100644 --- a/thirdparty/basis_universal/patches/external-jpgd.patch +++ b/thirdparty/basis_universal/patches/0002-external-jpgd.patch @@ -1,8 +1,8 @@ diff --git a/thirdparty/basis_universal/encoder/basisu_enc.cpp b/thirdparty/basis_universal/encoder/basisu_enc.cpp -index c431ceaf12..e87dd636a2 100644 +index 47e8981bc3..6c0ac0ad37 100644 --- a/thirdparty/basis_universal/encoder/basisu_enc.cpp +++ b/thirdparty/basis_universal/encoder/basisu_enc.cpp -@@ -409,7 +409,7 @@ namespace basisu +@@ -458,7 +458,7 @@ namespace basisu bool load_jpg(const char *pFilename, image& img) { int width = 0, height = 0, actual_comps = 0; diff --git a/thirdparty/basis_universal/patches/external-tinyexr.patch b/thirdparty/basis_universal/patches/0003-external-tinyexr.patch similarity index 95% rename from thirdparty/basis_universal/patches/external-tinyexr.patch rename to thirdparty/basis_universal/patches/0003-external-tinyexr.patch index 665af133007..e5f2b8422d2 100644 --- a/thirdparty/basis_universal/patches/external-tinyexr.patch +++ b/thirdparty/basis_universal/patches/0003-external-tinyexr.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/basis_universal/encoder/basisu_enc.cpp b/thirdparty/basis_universal/encoder/basisu_enc.cpp -index 6c0ac0ad370..2bf486a0287 100644 +index 6c0ac0ad37..2bf486a028 100644 --- a/thirdparty/basis_universal/encoder/basisu_enc.cpp +++ b/thirdparty/basis_universal/encoder/basisu_enc.cpp @@ -27,7 +27,7 @@ diff --git a/thirdparty/basis_universal/patches/remove-tinydds-qoi.patch b/thirdparty/basis_universal/patches/0004-remove-tinydds-qoi.patch similarity index 98% rename from thirdparty/basis_universal/patches/remove-tinydds-qoi.patch rename to thirdparty/basis_universal/patches/0004-remove-tinydds-qoi.patch index a4d176602d2..6a30616140b 100644 --- a/thirdparty/basis_universal/patches/remove-tinydds-qoi.patch +++ b/thirdparty/basis_universal/patches/0004-remove-tinydds-qoi.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/basis_universal/encoder/basisu_enc.cpp b/thirdparty/basis_universal/encoder/basisu_enc.cpp -index 2bf486a0287..fff98e83014 100644 +index 2bf486a028..fff98e8301 100644 --- a/thirdparty/basis_universal/encoder/basisu_enc.cpp +++ b/thirdparty/basis_universal/encoder/basisu_enc.cpp @@ -37,9 +37,6 @@ @@ -31,7 +31,7 @@ index 2bf486a0287..fff98e83014 100644 bool load_png(const uint8_t *pBuf, size_t buf_size, image &img, const char *pFilename) diff --git a/thirdparty/basis_universal/encoder/basisu_gpu_texture.cpp b/thirdparty/basis_universal/encoder/basisu_gpu_texture.cpp -index 000869a5337..342446b8fd4 100644 +index 000869a533..648cfb47ae 100644 --- a/thirdparty/basis_universal/encoder/basisu_gpu_texture.cpp +++ b/thirdparty/basis_universal/encoder/basisu_gpu_texture.cpp @@ -19,9 +19,6 @@ @@ -44,11 +44,10 @@ index 000869a5337..342446b8fd4 100644 namespace basisu { //------------------------------------------------------------------------------------------------ -@@ -1979,208 +1976,8 @@ namespace basisu - // Accepts 2D, 2D mipmapped, 2D array, 2D array mipmapped +@@ -1980,207 +1977,7 @@ namespace basisu // and cubemap, cubemap mipmapped, and cubemap array mipmapped. bool write_dds_file(uint8_vec &dds_data, const basisu::vector& gpu_images, bool cubemap_flag, bool use_srgb_format) -- { + { - if (!gpu_images.size()) - { - assert(0); @@ -250,7 +249,6 @@ index 000869a5337..342446b8fd4 100644 - } - - return true; -+ { + return false; } diff --git a/thirdparty/basis_universal/patches/basisu-pr344.patch b/thirdparty/basis_universal/patches/basisu-pr344.patch deleted file mode 100644 index 37390d3534b..00000000000 --- a/thirdparty/basis_universal/patches/basisu-pr344.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b4a0fa23c13da413d94b99f307e401c3b83e0108 Mon Sep 17 00:00:00 2001 -From: Ondrej Stava -Date: Fri, 23 Apr 2021 18:59:45 -0700 -Subject: [PATCH] Made it easier to use the library with external zstdlib - implementations (mostly in non CMake builds). -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In our internal repository, we have our own version of zstdlib and introducing extra copy is both undesirable and potentially dangerous (due to ODR violations). - -Co-authored-by: Rémi Verschelde ---- - encoder/basisu_comp.cpp | 2 +- - transcoder/basisu_transcoder.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/encoder/basisu_comp.cpp b/encoder/basisu_comp.cpp -index 41eae2b7..4e69e9e2 100644 ---- a/encoder/basisu_comp.cpp -+++ b/encoder/basisu_comp.cpp -@@ -28,7 +28,7 @@ - #endif - - #if BASISD_SUPPORT_KTX2_ZSTD --#include "../zstd/zstd.h" -+#include - #endif - - // Set to 1 to disable the mipPadding alignment workaround (which only seems to be needed when no key-values are written at all) -diff --git a/transcoder/basisu_transcoder.cpp b/transcoder/basisu_transcoder.cpp -index 3aeba0ee..c698861f 100644 ---- a/transcoder/basisu_transcoder.cpp -+++ b/transcoder/basisu_transcoder.cpp -@@ -155,7 +155,7 @@ - // If BASISD_SUPPORT_KTX2_ZSTD is 0, UASTC files compressed with Zstd cannot be loaded. - #if BASISD_SUPPORT_KTX2_ZSTD - // We only use two Zstd API's: ZSTD_decompress() and ZSTD_isError() -- #include "../zstd/zstd.h" -+ #include - #endif - #endif - diff --git a/thirdparty/clipper2/include/clipper2/clipper.core.h b/thirdparty/clipper2/include/clipper2/clipper.core.h index 0f69bf2d9ff..dd1b873d5de 100644 --- a/thirdparty/clipper2/include/clipper2/clipper.core.h +++ b/thirdparty/clipper2/include/clipper2/clipper.core.h @@ -695,13 +695,13 @@ namespace Clipper2Lib // returns true if (and only if) a * b == c * d inline bool ProductsAreEqual(int64_t a, int64_t b, int64_t c, int64_t d) { -// -- GODOT start -- -// #if (defined(__clang__) || defined(__GNUC__)) && UINTPTR_MAX >= UINT64_MAX -// const auto ab = static_cast<__int128_t>(a) * static_cast<__int128_t>(b); -// const auto cd = static_cast<__int128_t>(c) * static_cast<__int128_t>(d); -// return ab == cd; -// #else -// -- GODOT end -- +// Work around LLVM issue: https://github.com/llvm/llvm-project/issues/16778 +// Details: https://github.com/godotengine/godot/pull/95964#issuecomment-2306581804 +//#if (defined(__clang__) || defined(__GNUC__)) && UINTPTR_MAX >= UINT64_MAX +// const auto ab = static_cast<__int128_t>(a) * static_cast<__int128_t>(b); +// const auto cd = static_cast<__int128_t>(c) * static_cast<__int128_t>(d); +// return ab == cd; +//#else // nb: unsigned values needed for calculating overflow carry const auto abs_a = static_cast(std::abs(a)); const auto abs_b = static_cast(std::abs(b)); @@ -716,9 +716,7 @@ namespace Clipper2Lib const auto sign_cd = TriSign(c) * TriSign(d); return abs_ab == abs_cd && sign_ab == sign_cd; -// -- GODOT start -- // #endif -// -- GODOT end -- } template diff --git a/thirdparty/clipper2/patches/clipper2-exceptions.patch b/thirdparty/clipper2/patches/0001-disable-exceptions.patch similarity index 97% rename from thirdparty/clipper2/patches/clipper2-exceptions.patch rename to thirdparty/clipper2/patches/0001-disable-exceptions.patch index 44c2b0287a1..89be96f1fb8 100644 --- a/thirdparty/clipper2/patches/clipper2-exceptions.patch +++ b/thirdparty/clipper2/patches/0001-disable-exceptions.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/clipper2/include/clipper2/clipper.core.h b/thirdparty/clipper2/include/clipper2/clipper.core.h -index 925c04685e..d0d159b949 100644 +index 925c04685e..67dd731af6 100644 --- a/thirdparty/clipper2/include/clipper2/clipper.core.h +++ b/thirdparty/clipper2/include/clipper2/clipper.core.h @@ -22,6 +22,8 @@ diff --git a/thirdparty/clipper2/patches/llvm-error.patch b/thirdparty/clipper2/patches/0002-llvm-disable-int1280-math.patch similarity index 66% rename from thirdparty/clipper2/patches/llvm-error.patch rename to thirdparty/clipper2/patches/0002-llvm-disable-int1280-math.patch index e326d73e831..ffa06e72b86 100644 --- a/thirdparty/clipper2/patches/llvm-error.patch +++ b/thirdparty/clipper2/patches/0002-llvm-disable-int1280-math.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/clipper2/include/clipper2/clipper.core.h b/thirdparty/clipper2/include/clipper2/clipper.core.h -index 67dd731af6..0f69bf2d9f 100644 +index 67dd731af6..dd1b873d5d 100644 --- a/thirdparty/clipper2/include/clipper2/clipper.core.h +++ b/thirdparty/clipper2/include/clipper2/clipper.core.h @@ -695,11 +695,13 @@ namespace Clipper2Lib @@ -11,24 +11,22 @@ index 67dd731af6..0f69bf2d9f 100644 - const auto cd = static_cast<__int128_t>(c) * static_cast<__int128_t>(d); - return ab == cd; -#else -+// -- GODOT start -- -+// #if (defined(__clang__) || defined(__GNUC__)) && UINTPTR_MAX >= UINT64_MAX -+// const auto ab = static_cast<__int128_t>(a) * static_cast<__int128_t>(b); -+// const auto cd = static_cast<__int128_t>(c) * static_cast<__int128_t>(d); -+// return ab == cd; -+// #else -+// -- GODOT end -- ++// Work around LLVM issue: https://github.com/llvm/llvm-project/issues/16778 ++// Details: https://github.com/godotengine/godot/pull/95964#issuecomment-2306581804 ++//#if (defined(__clang__) || defined(__GNUC__)) && UINTPTR_MAX >= UINT64_MAX ++// const auto ab = static_cast<__int128_t>(a) * static_cast<__int128_t>(b); ++// const auto cd = static_cast<__int128_t>(c) * static_cast<__int128_t>(d); ++// return ab == cd; ++//#else // nb: unsigned values needed for calculating overflow carry const auto abs_a = static_cast(std::abs(a)); const auto abs_b = static_cast(std::abs(b)); -@@ -714,7 +716,9 @@ namespace Clipper2Lib +@@ -714,7 +716,7 @@ namespace Clipper2Lib const auto sign_cd = TriSign(c) * TriSign(d); return abs_ab == abs_cd && sign_ab == sign_cd; -#endif -+// -- GODOT start -- +// #endif -+// -- GODOT end -- } template diff --git a/thirdparty/cvtt/patches/revert_BC6H_reorg.patch b/thirdparty/cvtt/patches/0001-revert-bc6h-reorg.patch similarity index 100% rename from thirdparty/cvtt/patches/revert_BC6H_reorg.patch rename to thirdparty/cvtt/patches/0001-revert-bc6h-reorg.patch diff --git a/thirdparty/d3d12ma/D3D12MemAlloc.cpp b/thirdparty/d3d12ma/D3D12MemAlloc.cpp index 4d19e0e7276..80d910e6942 100644 --- a/thirdparty/d3d12ma/D3D12MemAlloc.cpp +++ b/thirdparty/d3d12ma/D3D12MemAlloc.cpp @@ -33,13 +33,11 @@ #include #endif -/* GODOT start */ #if !defined(_MSC_VER) #include #include #endif -/* GODOT end */ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -8186,7 +8184,6 @@ HRESULT AllocatorPimpl::UpdateD3D12Budget() D3D12_RESOURCE_ALLOCATION_INFO AllocatorPimpl::GetResourceAllocationInfoNative(const D3D12_RESOURCE_DESC& resourceDesc) const { -/* GODOT start */ #if defined(_MSC_VER) || !defined(_WIN32) return m_Device->GetResourceAllocationInfo(0, 1, &resourceDesc); #else @@ -8194,7 +8191,6 @@ D3D12_RESOURCE_ALLOCATION_INFO AllocatorPimpl::GetResourceAllocationInfoNative(c m_Device->GetResourceAllocationInfo(&ret, 0, 1, &resourceDesc); return ret; #endif -/* GODOT end */ } #ifdef __ID3D12Device8_INTERFACE_DEFINED__ @@ -8202,7 +8198,6 @@ D3D12_RESOURCE_ALLOCATION_INFO AllocatorPimpl::GetResourceAllocationInfoNative(c { D3D12MA_ASSERT(m_Device8 != NULL); D3D12_RESOURCE_ALLOCATION_INFO1 info1Unused; -/* GODOT start */ #if defined(_MSC_VER) || !defined(_WIN32) return m_Device8->GetResourceAllocationInfo2(0, 1, &resourceDesc, &info1Unused); #else @@ -8210,7 +8205,6 @@ D3D12_RESOURCE_ALLOCATION_INFO AllocatorPimpl::GetResourceAllocationInfoNative(c m_Device8->GetResourceAllocationInfo2(&ret, 0, 1, &resourceDesc, &info1Unused); return ret; #endif -/* GODOT end */ } #endif // #ifdef __ID3D12Device8_INTERFACE_DEFINED__ diff --git a/thirdparty/d3d12ma/patches/0001-mingw-support.patch b/thirdparty/d3d12ma/patches/0001-mingw-support.patch new file mode 100644 index 00000000000..90d4d434019 --- /dev/null +++ b/thirdparty/d3d12ma/patches/0001-mingw-support.patch @@ -0,0 +1,45 @@ +diff --git a/thirdparty/d3d12ma/D3D12MemAlloc.cpp b/thirdparty/d3d12ma/D3D12MemAlloc.cpp +index 8e2488091a..80d910e694 100644 +--- a/thirdparty/d3d12ma/D3D12MemAlloc.cpp ++++ b/thirdparty/d3d12ma/D3D12MemAlloc.cpp +@@ -33,6 +33,12 @@ + #include + #endif + ++#if !defined(_MSC_VER) ++#include ++ ++#include ++#endif ++ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + // +@@ -8178,7 +8184,13 @@ HRESULT AllocatorPimpl::UpdateD3D12Budget() + + D3D12_RESOURCE_ALLOCATION_INFO AllocatorPimpl::GetResourceAllocationInfoNative(const D3D12_RESOURCE_DESC& resourceDesc) const + { ++#if defined(_MSC_VER) || !defined(_WIN32) + return m_Device->GetResourceAllocationInfo(0, 1, &resourceDesc); ++#else ++ D3D12_RESOURCE_ALLOCATION_INFO ret; ++ m_Device->GetResourceAllocationInfo(&ret, 0, 1, &resourceDesc); ++ return ret; ++#endif + } + + #ifdef __ID3D12Device8_INTERFACE_DEFINED__ +@@ -8186,7 +8198,13 @@ D3D12_RESOURCE_ALLOCATION_INFO AllocatorPimpl::GetResourceAllocationInfoNative(c + { + D3D12MA_ASSERT(m_Device8 != NULL); + D3D12_RESOURCE_ALLOCATION_INFO1 info1Unused; ++#if defined(_MSC_VER) || !defined(_WIN32) + return m_Device8->GetResourceAllocationInfo2(0, 1, &resourceDesc, &info1Unused); ++#else ++ D3D12_RESOURCE_ALLOCATION_INFO ret; ++ m_Device8->GetResourceAllocationInfo2(&ret, 0, 1, &resourceDesc, &info1Unused); ++ return ret; ++#endif + } + #endif // #ifdef __ID3D12Device8_INTERFACE_DEFINED__ + diff --git a/thirdparty/directx_headers/include/directx/D3D12TokenizedProgramFormat.hpp b/thirdparty/directx_headers/include/directx/D3D12TokenizedProgramFormat.hpp deleted file mode 100644 index 4d04c3a7a50..00000000000 --- a/thirdparty/directx_headers/include/directx/D3D12TokenizedProgramFormat.hpp +++ /dev/null @@ -1,2627 +0,0 @@ -#pragma once -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* -// -// High Level Goals -// -// - Serve as the runtime/DDI representation for all D3D11 tokenized code, -// for all classes of programs, including pixel program, vertex program, -// geometry program, etc. -// -// - Any information that HLSL needs to give to drivers is encoded in -// this token format in some form. -// -// - Enable common tools and source code for managing all tokenizable -// program formats. -// -// - Support extensible token definitions, allowing full customizations for -// specific program classes, while maintaining general conventions for all -// program models. -// -// - Binary backwards compatible with D3D10. Any token name that was originally -// defined with "D3D10" in it is unchanged; D3D11 only adds new tokens. -// -// ---------------------------------------------------------------------------- -// -// Low Level Feature Summary -// -// - DWORD based tokens always, for simplicity -// - Opcode token is generally a single DWORD, though there is a bit indicating -// if extended information (extra DWORD(s)) are present -// - Operand tokens are a completely self contained, extensible format, -// with scalar and 4-vector data types as first class citizens, but -// allowance for extension to n-component vectors. -// - Initial operand token identifies register type, register file -// structure/dimensionality and mode of indexing for each dimension, -// and choice of component selection mechanism (i.e. mask vs. swizzle etc). -// - Optional additional extended operand tokens can defined things like -// modifiers (which are not needed by default). -// - Operand's immediate index value(s), if needed, appear as subsequent DWORD -// values, and if relative addressing is specified, an additional completely -// self contained operand definition appears nested in the token sequence. -// -// ---------------------------------------------------------------------------- - -#include - -#pragma region Application Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) - -// ---------------------------------------------------------------------------- -// Version Token (VerTok) -// -// [07:00] minor version number (0-255) -// [15:08] major version number (0-255) -// [31:16] D3D10_SB_TOKENIZED_PROGRAM_TYPE -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_TOKENIZED_PROGRAM_TYPE -{ - D3D10_SB_PIXEL_SHADER = 0, - D3D10_SB_VERTEX_SHADER = 1, - D3D10_SB_GEOMETRY_SHADER = 2, - - // D3D11 Shaders - D3D11_SB_HULL_SHADER = 3, - D3D11_SB_DOMAIN_SHADER = 4, - D3D11_SB_COMPUTE_SHADER = 5, - - // Subset of D3D12 Shaders where this field is referenced by runtime - // Entries from 6-12 are unique to state objects - // (e.g. library, callable and raytracing shaders) - D3D12_SB_MESH_SHADER = 13, - D3D12_SB_AMPLIFICATION_SHADER = 14, - - D3D11_SB_RESERVED0 = 0xFFF0 -} D3D10_SB_TOKENIZED_PROGRAM_TYPE; - -#define D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK 0xffff0000 -#define D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT 16 - -// DECODER MACRO: Retrieve program type from version token -#define DECODE_D3D10_SB_TOKENIZED_PROGRAM_TYPE(VerTok) ((D3D10_SB_TOKENIZED_PROGRAM_TYPE)(((VerTok)&D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK)>>D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT)) - -#define D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK 0x000000f0 -#define D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT 4 -#define D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK 0x0000000f - -// DECODER MACRO: Retrieve major version # from version token -#define DECODE_D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION(VerTok) (((VerTok)&D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK)>>D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT) -// DECODER MACRO: Retrieve minor version # from version token -#define DECODE_D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION(VerTok) ((VerTok)&D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK) - -// ENCODER MACRO: Create complete VerTok -#define ENCODE_D3D10_SB_TOKENIZED_PROGRAM_VERSION_TOKEN(ProgType,MajorVer,MinorVer) ((((ProgType)<> D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_SHIFT) - -// ENCODER MACRO: Store instruction length -// portion of OpcodeToken0, in # of DWORDs -// including the opcode token(s). -// Valid range is 1-127. -#define ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(Length) (((Length)<>D3D10_SB_INSTRUCTION_TEST_BOOLEAN_SHIFT)) -// ENCODER MACRO: Store "zero" or "nonzero" in the opcode -// specific control range of OpcodeToken0 -#define ENCODE_D3D10_SB_INSTRUCTION_TEST_BOOLEAN(Boolean) (((Boolean)<>D3D11_SB_INSTRUCTION_PRECISE_VALUES_SHIFT)) -// ENCODER MACRO: Given a set of -// D3D10_SB_OPERAND_4_COMPONENT_[X|Y|Z|W] values -// or'd together, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_INSTRUCTION_PRECISE_VALUES(ComponentMask) (((ComponentMask)<>D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_SHIFT)) -// ENCODER MACRO: Encode the return type for the resinfo instruction -// in the opcode specific control range of OpcodeToken0 -#define ENCODE_D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE(ReturnType) (((ReturnType)<> D3D10_SB_OPCODE_EXTENDED_SHIFT) -// ENCODER MACRO: Store in OpcodeToken0 whether the opcode is extended -// by an additional opcode token. -#define ENCODE_D3D10_SB_OPCODE_EXTENDED(bExtended) (((bExtended)!=0)?D3D10_SB_OPCODE_EXTENDED_MASK:0) - -// ---------------------------------------------------------------------------- -// Extended Opcode Format (OpcodeToken1) -// -// If bit31 of an opcode token is set, the -// opcode has an additional extended opcode token DWORD -// directly following OpcodeToken0. Other tokens -// expected for the opcode, such as the operand -// token(s) always follow -// OpcodeToken0 AND OpcodeToken1..n (extended -// opcode tokens, if present). -// -// [05:00] D3D10_SB_EXTENDED_OPCODE_TYPE -// [30:06] if([05:00] == D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS) -// { -// This custom opcode contains controls for SAMPLE. -// [08:06] Ignored, 0. -// [12:09] U texel immediate offset (4 bit 2's comp) (0 default) -// [16:13] V texel immediate offset (4 bit 2's comp) (0 default) -// [20:17] W texel immediate offset (4 bit 2's comp) (0 default) -// [30:14] Ignored, 0. -// } -// else if( [05:00] == D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM ) -// { -// [10:06] D3D10_SB_RESOURCE_DIMENSION -// [22:11] When dimension is D3D11_SB_RESOURCE_DIMENSION_STRUCTURED_BUFFER this holds the buffer stride, otherwise 0 -// [30:23] Ignored, 0. -// } -// else if( [05:00] == D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE ) -// { -// [09:06] D3D10_SB_RESOURCE_RETURN_TYPE for component X -// [13:10] D3D10_SB_RESOURCE_RETURN_TYPE for component Y -// [17:14] D3D10_SB_RESOURCE_RETURN_TYPE for component Z -// [21:18] D3D10_SB_RESOURCE_RETURN_TYPE for component W -// [30:22] Ignored, 0. -// } -// else -// { -// [30:04] Ignored, 0. -// } -// [31] 0 normally. 1 there is another extended opcode. Any number -// of extended opcode tokens can be chained. It is possible that some extended -// opcode tokens could include multiple DWORDS - that is defined -// on a case by case basis. -// -// ---------------------------------------------------------------------------- -typedef enum D3D10_SB_EXTENDED_OPCODE_TYPE -{ - D3D10_SB_EXTENDED_OPCODE_EMPTY = 0, - D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS = 1, - D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM = 2, - D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE = 3, -} D3D10_SB_EXTENDED_OPCODE_TYPE; -#define D3D11_SB_MAX_SIMULTANEOUS_EXTENDED_OPCODES 3 - -#define D3D10_SB_EXTENDED_OPCODE_TYPE_MASK 0x0000003f - -// DECODER MACRO: Given an extended opcode -// token (OpcodeToken1), figure out what type -// of token it is (from D3D10_SB_EXTENDED_OPCODE_TYPE enum) -// to be able to interpret the rest of the token's contents. -#define DECODE_D3D10_SB_EXTENDED_OPCODE_TYPE(OpcodeToken1) ((D3D10_SB_EXTENDED_OPCODE_TYPE)((OpcodeToken1)&D3D10_SB_EXTENDED_OPCODE_TYPE_MASK)) - -// ENCODER MACRO: Store extended opcode token -// type in OpcodeToken1. -#define ENCODE_D3D10_SB_EXTENDED_OPCODE_TYPE(ExtOpcodeType) ((ExtOpcodeType)&D3D10_SB_EXTENDED_OPCODE_TYPE_MASK) - -typedef enum D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD -{ - D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_U = 0, - D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_V = 1, - D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_W = 2, -} D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD; -#define D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD_MASK (3) -#define D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord) (9+4*((Coord)&D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD_MASK)) -#define D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_MASK(Coord) (0x0000000f<>(D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord)))) - -// ENCODER MACRO: Store the immediate texel address offset -// for U or V or W Coord (D3D10_SB_ADDRESS_OFFSET_COORD) in an extended -// opcode token (OpcodeToken1) that has extended opcode -// type == D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS (opcode type encoded separately) -// A 2's complement number is expected as input, from which the LSB 4 bits are extracted. -#define ENCODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(Coord,ImmediateOffset) (((ImmediateOffset)<>D3D11_SB_EXTENDED_RESOURCE_DIMENSION_SHIFT)) - -// ENCODER MACRO: Store resource dimension -// (D3D10_SB_RESOURCE_DIMENSION enum) into a -// an extended resource declaration token (D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM) -#define ENCODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION(ResourceDim) (((ResourceDim)<>D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_SHIFT) - -// ENCODER MACRO: Store resource dimension structure stride -// (12-bit unsigned integer) into a -// an extended resource declaration token (D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM) -#define ENCODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE(Stride) (((Stride)<> \ - (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS + D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT))&D3D10_SB_RESOURCE_RETURN_TYPE_MASK)) - -// ENCODER MACRO: Generate a resource return type for a component in an extended -// resource delcaration token (D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE) -#define ENCODE_D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE(ReturnType, Component) \ - (((ReturnType)&D3D10_SB_RESOURCE_RETURN_TYPE_MASK) << (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS + D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT)) - -// ---------------------------------------------------------------------------- -// Custom-Data Block Format -// -// DWORD 0 (CustomDataDescTok): -// [10:00] == D3D10_SB_OPCODE_CUSTOMDATA -// [31:11] == D3D10_SB_CUSTOMDATA_CLASS -// -// DWORD 1: -// 32-bit unsigned integer count of number -// of DWORDs in custom-data block, -// including DWORD 0 and DWORD 1. -// So the minimum value is 0x00000002, -// meaning empty custom-data. -// -// Layout of custom-data contents, for the various meta-data classes, -// not defined in this file. -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_CUSTOMDATA_CLASS -{ - D3D10_SB_CUSTOMDATA_COMMENT = 0, - D3D10_SB_CUSTOMDATA_DEBUGINFO, - D3D10_SB_CUSTOMDATA_OPAQUE, - D3D10_SB_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER, - D3D11_SB_CUSTOMDATA_SHADER_MESSAGE, - D3D11_SB_CUSTOMDATA_SHADER_CLIP_PLANE_CONSTANT_MAPPINGS_FOR_DX9, -} D3D10_SB_CUSTOMDATA_CLASS; - -#define D3D10_SB_CUSTOMDATA_CLASS_MASK 0xfffff800 -#define D3D10_SB_CUSTOMDATA_CLASS_SHIFT 11 -// DECODER MACRO: Find out what class of custom-data is present. -// The contents of the custom-data block are defined -// for each class of custom-data. -#define DECODE_D3D10_SB_CUSTOMDATA_CLASS(CustomDataDescTok) ((D3D10_SB_CUSTOMDATA_CLASS)(((CustomDataDescTok)&D3D10_SB_CUSTOMDATA_CLASS_MASK)>>D3D10_SB_CUSTOMDATA_CLASS_SHIFT)) -// ENCODER MACRO: Create complete CustomDataDescTok -#define ENCODE_D3D10_SB_CUSTOMDATA_CLASS(CustomDataClass) (ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_CUSTOMDATA)|(((CustomDataClass)<= D3D10_SB_OPERAND_INDEX_1D ) -// D3D10_SB_OPERAND_INDEX_REPRESENTATION for first operand index -// else -// Ignored, 0 -// [27:25] if( [21:20] >= D3D10_SB_OPERAND_INDEX_2D ) -// D3D10_SB_OPERAND_INDEX_REPRESENTATION for second operand index -// else -// Ignored, 0 -// [30:28] if( [21:20] == D3D10_SB_OPERAND_INDEX_3D ) -// D3D10_SB_OPERAND_INDEX_REPRESENTATION for third operand index -// else -// Ignored, 0 -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. -// -// ---------------------------------------------------------------------------- - -// Number of components in data vector referred to by operand. -typedef enum D3D10_SB_OPERAND_NUM_COMPONENTS -{ - D3D10_SB_OPERAND_0_COMPONENT = 0, - D3D10_SB_OPERAND_1_COMPONENT = 1, - D3D10_SB_OPERAND_4_COMPONENT = 2, - D3D10_SB_OPERAND_N_COMPONENT = 3 // unused for now -} D3D10_SB_OPERAND_NUM_COMPONENTS; -#define D3D10_SB_OPERAND_NUM_COMPONENTS_MASK 0x00000003 - -// DECODER MACRO: Extract from OperandToken0 how many components -// the data vector referred to by the operand contains. -// (D3D10_SB_OPERAND_NUM_COMPONENTS enum) -#define DECODE_D3D10_SB_OPERAND_NUM_COMPONENTS(OperandToken0) ((D3D10_SB_OPERAND_NUM_COMPONENTS)((OperandToken0)&D3D10_SB_OPERAND_NUM_COMPONENTS_MASK)) - -// ENCODER MACRO: Define in OperandToken0 how many components -// the data vector referred to by the operand contains. -// (D3D10_SB_OPERAND_NUM_COMPONENTS enum). -#define ENCODE_D3D10_SB_OPERAND_NUM_COMPONENTS(NumComp) ((NumComp)&D3D10_SB_OPERAND_NUM_COMPONENTS_MASK) - -typedef enum D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE -{ - D3D10_SB_OPERAND_4_COMPONENT_MASK_MODE = 0, // mask 4 components - D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_MODE = 1, // swizzle 4 components - D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MODE = 2, // select 1 of 4 components -} D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE; - -#define D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK 0x0000000c -#define D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT 2 - -// DECODER MACRO: For an operand representing 4component data, -// extract from OperandToken0 the method for selecting data from -// the 4 components (D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE). -#define DECODE_D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE(OperandToken0) ((D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE)(((OperandToken0)&D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK)>>D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT)) - -// ENCODER MACRO: For an operand representing 4component data, -// encode in OperandToken0 a value from D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE -#define ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE(SelectionMode) (((SelectionMode)<>(D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SHIFT+2*((DestComp)&D3D10_SB_4_COMPONENT_NAME_MASK)))&D3D10_SB_4_COMPONENT_NAME_MASK)) - -// ENCODER MACRO: Generate a 4 component swizzle given -// 4 D3D10_SB_4_COMPONENT_NAME source values for dest -// components x, y, z, w respectively. -#define ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(XSrc,YSrc,ZSrc,WSrc) ((((XSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)| \ - (((YSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)<<2)| \ - (((ZSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)<<4)| \ - (((WSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)<<6) \ - )<>D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_SHIFT)) - -// ENCODER MACRO: Given a D3D10_SB_4_COMPONENT_NAME selecting -// a single component for D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MODE, -// encode it into OperandToken0 -#define ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SELECT_1(SelectedComp) (((SelectedComp)<>D3D10_SB_OPERAND_TYPE_SHIFT)) - -// ENCODER MACRO: Store operand type in OperandToken0. -#define ENCODE_D3D10_SB_OPERAND_TYPE(OperandType) (((OperandType)<>D3D10_SB_OPERAND_INDEX_DIMENSION_SHIFT)) - -// ENCODER MACRO: Store operand index dimension -// (D3D10_SB_OPERAND_INDEX_DIMENSION enum) in OperandToken0. -#define ENCODE_D3D10_SB_OPERAND_INDEX_DIMENSION(OperandIndexDim) (((OperandIndexDim)<>D3D10_SB_OPERAND_INDEX_REPRESENTATION_SHIFT(Dim))) - -// ENCODER MACRO: Store in OperandToken0 what representation -// an operand index is provided as (D3D10_SB_OPERAND_INDEX_REPRESENTATION enum), -// for index dimension [0], [1] or [2], depending on D3D10_SB_OPERAND_INDEX_DIMENSION. -#define ENCODE_D3D10_SB_OPERAND_INDEX_REPRESENTATION(Dim,IndexRepresentation) (((IndexRepresentation)<>D3D10_SB_OPERAND_EXTENDED_SHIFT) - -// ENCODER MACRO: Store in OperandToken0 whether the operand is extended -// by an additional operand token. -#define ENCODE_D3D10_SB_OPERAND_EXTENDED(bExtended) (((bExtended)!=0)?D3D10_SB_OPERAND_EXTENDED_MASK:0) - -// ---------------------------------------------------------------------------- -// Extended Instruction Operand Format (OperandToken1) -// -// If bit31 of an operand token is set, the -// operand has additional data in a second DWORD -// directly following OperandToken0. Other tokens -// expected for the operand, such as immmediate -// values or relative address operands (full -// operands in themselves) always follow -// OperandToken0 AND OperandToken1..n (extended -// operand tokens, if present). -// -// [05:00] D3D10_SB_EXTENDED_OPERAND_TYPE -// [16:06] if([05:00] == D3D10_SB_EXTENDED_OPERAND_MODIFIER) -// { -// [13:06] D3D10_SB_OPERAND_MODIFIER -// [16:14] Min Precision: D3D11_SB_OPERAND_MIN_PRECISION -// [17:17] Non-uniform: D3D12_SB_OPERAND_NON_UNIFORM -// } -// else -// { -// [17:06] Ignored, 0. -// } -// [30:18] Ignored, 0. -// [31] 0 normally. 1 if second order extended operand definition, -// meaning next DWORD contains yet ANOTHER extended operand -// description. Currently no second order extensions defined. -// This would be useful if a particular extended operand does -// not have enough space to store the required information in -// a single token and so is extended further. -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_EXTENDED_OPERAND_TYPE -{ - D3D10_SB_EXTENDED_OPERAND_EMPTY = 0, // Might be used if this - // enum is full and - // further extended opcode - // is needed. - D3D10_SB_EXTENDED_OPERAND_MODIFIER = 1, -} D3D10_SB_EXTENDED_OPERAND_TYPE; -#define D3D10_SB_EXTENDED_OPERAND_TYPE_MASK 0x0000003f - -// DECODER MACRO: Given an extended operand -// token (OperandToken1), figure out what type -// of token it is (from D3D10_SB_EXTENDED_OPERAND_TYPE enum) -// to be able to interpret the rest of the token's contents. -#define DECODE_D3D10_SB_EXTENDED_OPERAND_TYPE(OperandToken1) ((D3D10_SB_EXTENDED_OPERAND_TYPE)((OperandToken1)&D3D10_SB_EXTENDED_OPERAND_TYPE_MASK)) - -// ENCODER MACRO: Store extended operand token -// type in OperandToken1. -#define ENCODE_D3D10_SB_EXTENDED_OPERAND_TYPE(ExtOperandType) ((ExtOperandType)&D3D10_SB_EXTENDED_OPERAND_TYPE_MASK) - -typedef enum D3D10_SB_OPERAND_MODIFIER -{ - D3D10_SB_OPERAND_MODIFIER_NONE = 0, // Nop. This is the implied - // default if the extended - // operand is not present for - // an operand for which source - // modifiers are meaningful - D3D10_SB_OPERAND_MODIFIER_NEG = 1, // Negate - D3D10_SB_OPERAND_MODIFIER_ABS = 2, // Absolute value, abs() - D3D10_SB_OPERAND_MODIFIER_ABSNEG = 3, // -abs() -} D3D10_SB_OPERAND_MODIFIER; -#define D3D10_SB_OPERAND_MODIFIER_MASK 0x00003fc0 -#define D3D10_SB_OPERAND_MODIFIER_SHIFT 6 - -// DECODER MACRO: Given a D3D10_SB_EXTENDED_OPERAND_MODIFIER -// extended token (OperandToken1), determine the source modifier -// (D3D10_SB_OPERAND_MODIFIER enum) -#define DECODE_D3D10_SB_OPERAND_MODIFIER(OperandToken1) ((D3D10_SB_OPERAND_MODIFIER)(((OperandToken1)&D3D10_SB_OPERAND_MODIFIER_MASK)>>D3D10_SB_OPERAND_MODIFIER_SHIFT)) - -// ENCODER MACRO: Generate a complete source modifier extended token -// (OperandToken1), given D3D10_SB_OPERAND_MODIFIER enum (the -// ext. operand type is also set to D3D10_SB_EXTENDED_OPERAND_MODIFIER). -#define ENCODE_D3D10_SB_EXTENDED_OPERAND_MODIFIER(SourceMod) ((((SourceMod)<> D3D11_SB_OPERAND_MIN_PRECISION_SHIFT)) - -// ENCODER MACRO: Encode minimum precision for execution -// into the extended operand token, OperandToken1 -#define ENCODE_D3D11_SB_OPERAND_MIN_PRECISION(MinPrecision) (((MinPrecision)<< D3D11_SB_OPERAND_MIN_PRECISION_SHIFT)& D3D11_SB_OPERAND_MIN_PRECISION_MASK) - - -// Non-uniform extended operand modifier. -#define D3D12_SB_OPERAND_NON_UNIFORM_MASK 0x00020000 -#define D3D12_SB_OPERAND_NON_UNIFORM_SHIFT 17 - -// DECODER MACRO: For an OperandToken1 that can specify a non-uniform operand -#define DECODE_D3D12_SB_OPERAND_NON_UNIFORM(OperandToken1) (((OperandToken1)& D3D12_SB_OPERAND_NON_UNIFORM_MASK)>> D3D12_SB_OPERAND_NON_UNIFORM_SHIFT) - -// ENCODER MACRO: Encode non-uniform state into the extended operand token, OperandToken1 -#define ENCODE_D3D12_SB_OPERAND_NON_UNIFORM(NonUniform) (((NonUniform)<< D3D12_SB_OPERAND_NON_UNIFORM_SHIFT)& D3D12_SB_OPERAND_NON_UNIFORM_MASK) - - -#define D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK 0x80000000 -#define D3D10_SB_OPERAND_DOUBLE_EXTENDED_SHIFT 31 -// DECODER MACRO: Determine if an extended operand token -// (OperandToken1) is further extended by yet another token -// (OperandToken2). Currently there are no secondary -// extended operand tokens. -#define DECODE_IS_D3D10_SB_OPERAND_DOUBLE_EXTENDED(OperandToken1) (((OperandToken1)&D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK)>>D3D10_SB_OPERAND_DOUBLE_EXTENDED_SHIFT) - -// ENCODER MACRO: Store in OperandToken1 whether the operand is extended -// by an additional operand token. Currently there are no secondary -// extended operand tokens. -#define ENCODE_D3D10_SB_OPERAND_DOUBLE_EXTENDED(bExtended) (((bExtended)!=0)?D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK:0) - -// ---------------------------------------------------------------------------- -// Name Token (NameToken) (used in declaration statements) -// -// [15:00] D3D10_SB_NAME enumeration -// [31:16] Reserved, 0 -// -// ---------------------------------------------------------------------------- -#define D3D10_SB_NAME_MASK 0x0000ffff - -// DECODER MACRO: Get the name from NameToken -#define DECODE_D3D10_SB_NAME(NameToken) ((D3D10_SB_NAME)((NameToken)&D3D10_SB_NAME_MASK)) - -// ENCODER MACRO: Generate a complete NameToken given a D3D10_SB_NAME -#define ENCODE_D3D10_SB_NAME(Name) ((Name)&D3D10_SB_NAME_MASK) - -//--------------------------------------------------------------------- -// Declaration Statements -// -// Declarations start with a standard opcode token, -// having opcode type being D3D10_SB_OPCODE_DCL*. -// Each particular declaration type has custom -// operand token(s), described below. -//--------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Global Flags Declaration -// -// OpcodeToken0: -// -// [10:00] D3D10_SB_OPCODE_DCL_GLOBAL_FLAGS -// [11:11] Refactoring allowed if bit set. -// [12:12] Enable double precision float ops. -// [13:13] Force early depth-stencil test. -// [14:14] Enable RAW and structured buffers in non-CS 4.x shaders. -// [15:15] Skip optimizations of shader IL when translating to native code -// [16:16] Enable minimum-precision data types -// [17:17] Enable 11.1 double-precision floating-point instruction extensions -// [18:18] Enable 11.1 non-double instruction extensions -// [23:19] Reserved for future flags. -// [30:24] Instruction length in DWORDs including the opcode token. == 1 -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by no operands. -// -// ---------------------------------------------------------------------------- -#define D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED (1<<11) -#define D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS (1<<12) -#define D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL (1<<13) -#define D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS (1<<14) -#define D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION (1<<15) -#define D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION (1<<16) -#define D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS (1<<17) -#define D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS (1<<18) -#define D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND (1<<19) - -#define D3D10_SB_GLOBAL_FLAGS_MASK 0x00fff800 - -// DECODER MACRO: Get global flags -#define DECODE_D3D10_SB_GLOBAL_FLAGS(OpcodeToken0) ((OpcodeToken0)&D3D10_SB_GLOBAL_FLAGS_MASK) - -// ENCODER MACRO: Encode global flags -#define ENCODE_D3D10_SB_GLOBAL_FLAGS(Flags) ((Flags)&D3D10_SB_GLOBAL_FLAGS_MASK) - -// ---------------------------------------------------------------------------- -// Resource Declaration (non multisampled) -// -// OpcodeToken0: -// -// [10:00] D3D10_SB_OPCODE_DCL_RESOURCE -// [15:11] D3D10_SB_RESOURCE_DIMENSION -// [23:16] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands on Shader Models 4.0 through 5.0: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// -// OpcodeToken0 is followed by 3 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (t[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -#define D3D10_SB_RESOURCE_DIMENSION_MASK 0x0000F800 -#define D3D10_SB_RESOURCE_DIMENSION_SHIFT 11 - -// DECODER MACRO: Given a resource declaration token, -// (OpcodeToken0), determine the resource dimension -// (D3D10_SB_RESOURCE_DIMENSION enum) -#define DECODE_D3D10_SB_RESOURCE_DIMENSION(OpcodeToken0) ((D3D10_SB_RESOURCE_DIMENSION)(((OpcodeToken0)&D3D10_SB_RESOURCE_DIMENSION_MASK)>>D3D10_SB_RESOURCE_DIMENSION_SHIFT)) - -// ENCODER MACRO: Store resource dimension -// (D3D10_SB_RESOURCE_DIMENSION enum) into a -// a resource declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_RESOURCE_DIMENSION(ResourceDim) (((ResourceDim)<[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -// use same macro for encoding/decoding resource dimension aas the non-msaa declaration - -#define D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK 0x07F0000 -#define D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT 16 - -// DECODER MACRO: Given a resource declaration token, -// (OpcodeToken0), determine the resource sample count (1..127) -#define DECODE_D3D10_SB_RESOURCE_SAMPLE_COUNT(OpcodeToken0) ((UINT)(((OpcodeToken0)&D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK)>>D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT)) - -// ENCODER MACRO: Store resource sample count up to 127 into a -// a resource declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_RESOURCE_SAMPLE_COUNT(SampleCount) (((SampleCount > 127 ? 127 : SampleCount)<> \ - (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS))&D3D10_SB_RESOURCE_RETURN_TYPE_MASK)) - -// ENCODER MACRO: Generate a resource return type for a component -#define ENCODE_D3D10_SB_RESOURCE_RETURN_TYPE(ReturnType, Component) \ - (((ReturnType)&D3D10_SB_RESOURCE_RETURN_TYPE_MASK) << (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS)) - -// ---------------------------------------------------------------------------- -// Sampler Declaration -// -// OpcodeToken0: -// -// [10:00] D3D10_SB_OPCODE_DCL_SAMPLER -// [14:11] D3D10_SB_SAMPLER_MODE -// [23:15] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 1 operand on Shader Models 4.0 through 5.0: -// (1) Operand starting with OperandToken0, defining which sampler -// (D3D10_SB_OPERAND_TYPE_SAMPLER) register # is being declared. -// -// OpcodeToken0 is followed by 2 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// s# register (D3D10_SB_OPERAND_TYPE_SAMPLER) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (s[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of samplers in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the s# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (s[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of sampler within space (may be dynamically indexed) -// (2) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -typedef enum D3D10_SB_SAMPLER_MODE -{ - D3D10_SB_SAMPLER_MODE_DEFAULT = 0, - D3D10_SB_SAMPLER_MODE_COMPARISON = 1, - D3D10_SB_SAMPLER_MODE_MONO = 2, -} D3D10_SB_SAMPLER_MODE; - -#define D3D10_SB_SAMPLER_MODE_MASK 0x00007800 -#define D3D10_SB_SAMPLER_MODE_SHIFT 11 - -// DECODER MACRO: Find out if a Constant Buffer is going to be indexed or not -#define DECODE_D3D10_SB_SAMPLER_MODE(OpcodeToken0) ((D3D10_SB_SAMPLER_MODE)(((OpcodeToken0)&D3D10_SB_SAMPLER_MODE_MASK)>>D3D10_SB_SAMPLER_MODE_SHIFT)) - -// ENCODER MACRO: Generate a resource return type for a component -#define ENCODE_D3D10_SB_SAMPLER_MODE(SamplerMode) (((SamplerMode)<>D3D10_SB_INPUT_INTERPOLATION_MODE_SHIFT)) - -// ENCODER MACRO: Encode interpolation mode for a register. -#define ENCODE_D3D10_SB_INPUT_INTERPOLATION_MODE(InterpolationMode) (((InterpolationMode)<[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of constant buffers in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the cb#[] is used in shader instructions: (cb[][]) -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of constant buffer within space (may be dynamically indexed) -// 3 : location of vector within constant buffer being referenced, -// which may also be dynamically indexed, with no access pattern flag required. -// (2) a DWORD indicating the size of the constant buffer as a count of 16-byte vectors. -// Each vector is 32-bit*4 elements == 128-bits == 16 bytes. -// If the size is specified as 0, the CB size is not known (any size CB -// can be bound to the slot). -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN -{ - D3D10_SB_CONSTANT_BUFFER_IMMEDIATE_INDEXED = 0, - D3D10_SB_CONSTANT_BUFFER_DYNAMIC_INDEXED = 1 -} D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN; - -#define D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK 0x00000800 -#define D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT 11 - -// DECODER MACRO: Find out if a Constant Buffer is going to be indexed or not -#define DECODE_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(OpcodeToken0) ((D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN)(((OpcodeToken0)&D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK)>>D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT)) - -// ENCODER MACRO: Encode the access pattern for the Constant Buffer -#define ENCODE_D3D10_SB_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(AccessPattern) (((AccessPattern)<>D3D10_SB_GS_INPUT_PRIMITIVE_SHIFT)) - -// ENCODER MACRO: Store primitive topology -// (D3D10_SB_PRIMITIVE enum) into a -// a primitive topology declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_GS_INPUT_PRIMITIVE(Prim) (((Prim)<>D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_SHIFT)) - -// ENCODER MACRO: Store primitive topology -// (D3D10_SB_PRIMITIVE_TOPOLOGY enum) into a -// a primitive topology declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY(PrimTopology) (((PrimTopology)<>D3D11_SB_INPUT_CONTROL_POINT_COUNT_SHIFT)) - -// ENCODER MACRO: Store input control point count into a declaration token -#define ENCODE_D3D11_SB_INPUT_CONTROL_POINT_COUNT(Count) (((Count)<>D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_SHIFT)) - -// ENCODER MACRO: Store output control point count into a declaration token -#define ENCODE_D3D11_SB_OUTPUT_CONTROL_POINT_COUNT(Count) (((Count)<>D3D11_SB_TESS_DOMAIN_SHIFT)) - -// ENCODER MACRO: Store tessellator domain -// (D3D11_SB_TESSELLATOR_DOMAIN enum) into a -// a tessellator domain declaration token (OpcodeToken0) -#define ENCODE_D3D11_SB_TESS_DOMAIN(Domain) (((Domain)<>D3D11_SB_TESS_PARTITIONING_SHIFT)) - -// ENCODER MACRO: Store tessellator partitioning -// (D3D11_SB_TESSELLATOR_PARTITIONING enum) into a -// a tessellator partitioning declaration token (OpcodeToken0) -#define ENCODE_D3D11_SB_TESS_PARTITIONING(Partitioning) (((Partitioning)<>D3D11_SB_TESS_OUTPUT_PRIMITIVE_SHIFT)) - -// ENCODER MACRO: Store tessellator output primitive -// (D3D11_SB_TESSELLATOR_OUTPUT_PRIMITIVE enum) into a -// a tessellator output primitive declaration token (OpcodeToken0) -#define ENCODE_D3D11_SB_TESS_OUTPUT_PRIMITIVE(OutputPrimitive) (((OutputPrimitive)<>D3D10_SB_INSTRUCTION_RETURN_TYPE_SHIFT)) -// ENCODER MACRO: Encode the return type for instructions -// in the opcode specific control range of OpcodeToken0 -#define ENCODE_D3D10_SB_INSTRUCTION_RETURN_TYPE(ReturnType) (((ReturnType)<>D3D11_SB_INTERFACE_INDEXED_BIT_SHIFT) ? true : false) -#define ENCODE_D3D11_SB_INTERFACE_INDEXED_BIT(IndexedBit) (((IndexedBit)<>D3D11_SB_INTERFACE_TABLE_LENGTH_SHIFT)) -#define ENCODE_D3D11_SB_INTERFACE_TABLE_LENGTH(TableLength) (((TableLength)<>D3D11_SB_INTERFACE_ARRAY_LENGTH_SHIFT)) -#define ENCODE_D3D11_SB_INTERFACE_ARRAY_LENGTH(ArrayLength) (((ArrayLength)<[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of UAV's in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the u# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (u[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of uav within space (may be dynamically indexed) -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -// UAV access scope flags -#define D3D11_SB_GLOBALLY_COHERENT_ACCESS 0x00010000 -#define D3D11_SB_ACCESS_COHERENCY_MASK 0x00010000 - -// DECODER MACRO: Retrieve flags for sync instruction from OpcodeToken0. -#define DECODE_D3D11_SB_ACCESS_COHERENCY_FLAGS(OperandToken0) ((OperandToken0)&D3D11_SB_ACCESS_COHERENCY_MASK) - -// ENCODER MACRO: Given a set of sync instruciton flags, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_ACCESS_COHERENCY_FLAGS(Flags) ((Flags)&D3D11_SB_ACCESS_COHERENCY_MASK) - -// Additional UAV access flags -#define D3D11_SB_RASTERIZER_ORDERED_ACCESS 0x00020000 - -// Resource flags mask. Use to retrieve all resource flags, including the order preserving counter. -#define D3D11_SB_RESOURCE_FLAGS_MASK (D3D11_SB_GLOBALLY_COHERENT_ACCESS|D3D11_SB_RASTERIZER_ORDERED_ACCESS|D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER) - -// DECODER MACRO: Retrieve UAV access flags for from OpcodeToken0. -#define DECODE_D3D11_SB_RESOURCE_FLAGS(OperandToken0) ((OperandToken0)&D3D11_SB_RESOURCE_FLAGS_MASK) - -// ENCODER MACRO: Given UAV access flags, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_RESOURCE_FLAGS(Flags) ((Flags)&D3D11_SB_RESOURCE_FLAGS_MASK) - -// ---------------------------------------------------------------------------- -// Raw Unordered Access View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_RAW -// [15:11] Ignored, 0 -// [16:16] D3D11_SB_GLOBALLY_COHERENT_ACCESS or 0 (LOCALLY_COHERENT) -// [17:17] D3D11_SB_RASTERIZER_ORDERED_ACCESS or 0 -// [23:18] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 1 operand on Shader Models 4.0 through 5.0: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is being declared. -// -// OpcodeToken0 is followed by 2 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (u[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of UAV's in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the u# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (u[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of uav within space (may be dynamically indexed) -// (2) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Structured Unordered Access View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_STRUCTURED -// [15:11] Ignored, 0 -// [16:16] D3D11_SB_GLOBALLY_COHERENT_ACCESS or 0 (LOCALLY_COHERENT) -// [17:17] D3D11_SB_RASTERIZER_ORDERED_ACCESS or 0 -// [22:18] Ignored, 0 -// [23:23] D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER or 0 -// -// The presence of this flag means that if a UAV is bound to the -// corresponding slot, it must have been created with -// D3D11_BUFFER_UAV_FLAG_COUNTER at the API. Also, the shader -// can contain either imm_atomic_alloc or _consume instructions -// operating on the given UAV. -// -// If this flag is not present, the shader can still contain -// either imm_atomic_alloc or imm_atomic_consume instructions for -// this UAV. But if such instructions are present in this case, -// and a UAV is bound corresponding slot, it must have been created -// with the D3D11_BUFFER_UAV_FLAG_APPEND flag at the API. -// Append buffers have a counter as well, but values returned -// to the shader are only valid for the lifetime of the shader -// invocation. -// -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is -// being declared. -// (2) a DWORD indicating UINT32 byte stride -// -// OpcodeToken0 is followed by 3 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (u[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of UAV's in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the u# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (u[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of uav within space (may be dynamically indexed) -// (2) a DWORD indicating UINT32 byte stride -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -// UAV flags -#define D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER 0x00800000 -#define D3D11_SB_UAV_FLAGS_MASK 0x00800000 - -// DECODER MACRO: Retrieve flags about UAV from OpcodeToken0. -#define DECODE_D3D11_SB_UAV_FLAGS(OperandToken0) ((OperandToken0)&D3D11_SB_UAV_FLAGS_MASK) - -// ENCODER MACRO: Given a set of UAV flags, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_UAV_FLAGS(Flags) ((Flags)&D3D11_SB_UAV_FLAGS_MASK) - -// ---------------------------------------------------------------------------- -// Raw Thread Group Shared Memory Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_THREAD_GROUP_SHARED_MEMORY_RAW -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands: -// (1) an operand, starting with OperandToken0, defining which -// g# register (D3D11_SB_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY) is being declared. -// (2) a DWORD indicating the byte count, which must be a multiple of 4. -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Structured Thread Group Shared Memory Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_THREAD_GROUP_SHARED_MEMORY_STRUCTURED -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 3 operands: -// (1) an operand, starting with OperandToken0, defining which -// g# register (D3D11_SB_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY) is -// being declared. -// (2) a DWORD indicating UINT32 struct byte stride -// (3) a DWORD indicating UINT32 struct count -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Raw Shader Resource View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_RESOURCE_RAW -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 1 operand: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// -// OpcodeToken0 is followed by 2 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (t[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Structured Shader Resource View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_RESOURCE_STRUCTURED -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands: -// (1) an operand, starting with OperandToken0, defining which -// g# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is -// being declared. -// (2) a DWORD indicating UINT32 struct byte stride -// -// OpcodeToken0 is followed by 3 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (t[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a DWORD indicating UINT32 struct byte stride -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ -#pragma endregion diff --git a/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h b/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h index 653a422d03b..433a4ee79ad 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h @@ -1,4 +1,4 @@ -//********************************************************* +//********************************************************* // // Copyright (c) Microsoft Corporation. // Licensed under the MIT License (MIT). diff --git a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h index b94073d38cc..27c7f204485 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h @@ -25,12 +25,10 @@ struct DefaultSampleMask { operator UINT() noexcept { return UINT_MAX; } }; struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() noexcept { return DXGI_SAMPLE_DESC{1, 0}; } }; -/* GODOT start */ #if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable : 4324) #endif -/* GODOT start */ template class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT { @@ -46,11 +44,9 @@ class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT InnerStructType* operator&() noexcept { return &pssInner; } InnerStructType const* operator&() const noexcept { return &pssInner; } }; -/* GODOT start */ #if defined(_MSC_VER) #pragma warning(pop) #endif -/* GODOT end */ typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; diff --git a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h index a83d9d017c7..2da79d10f12 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h @@ -996,9 +996,7 @@ struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE // two code paths for building root signatures, this helper method reconstructs a 1.0 signature when // 1.1 is not supported. inline HRESULT D3DX12SerializeVersionedRootSignature( -/* GODOT start */ _In_ HMODULE pLibD3D12, -/* GODOT end */ _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, D3D_ROOT_SIGNATURE_VERSION MaxVersion, _Outptr_ ID3DBlob** ppBlob, @@ -1009,22 +1007,18 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( *ppErrorBlob = nullptr; } - /* GODOT start */ - PFN_D3D12_SERIALIZE_ROOT_SIGNATURE d3d_D3D12SerializeRootSignature = (PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(void *)GetProcAddress(pLibD3D12, "D3D12SerializeRootSignature"); + PFN_D3D12_SERIALIZE_ROOT_SIGNATURE d3d_D3D12SerializeRootSignature = (PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(void *)GetProcAddress(pLibD3D12, "D3D12SerializeRootSignature"); if (d3d_D3D12SerializeRootSignature == nullptr) { return E_INVALIDARG; } PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE d3d_D3D12SerializeVersionedRootSignature = (PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)(void *)GetProcAddress(pLibD3D12, "D3D12SerializeVersionedRootSignature"); - /* GODOT end */ switch (MaxVersion) { case D3D_ROOT_SIGNATURE_VERSION_1_0: switch (pRootSignatureDesc->Version) { case D3D_ROOT_SIGNATURE_VERSION_1_0: -/* GODOT start */ return d3d_D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); -/* GODOT end */ case D3D_ROOT_SIGNATURE_VERSION_1_1: #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) @@ -1126,9 +1120,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( if (SUCCEEDED(hr)) { const CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); -/* GODOT start */ hr = d3d_D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); -/* GODOT end */ } if (pParameters) @@ -1159,9 +1151,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( { case D3D_ROOT_SIGNATURE_VERSION_1_0: case D3D_ROOT_SIGNATURE_VERSION_1_1: -/* GODOT start */ return d3d_D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); -/* GODOT end */ #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) case D3D_ROOT_SIGNATURE_VERSION_1_2: @@ -1197,9 +1187,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( if (SUCCEEDED(hr)) { const CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC desc(desc_1_1.NumParameters, desc_1_1.pParameters, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); -/* GODOT start */ hr = d3d_D3D12SerializeVersionedRootSignature(&desc, ppBlob, ppErrorBlob); -/* GODOT end */ } if (pStaticSamplers) @@ -1215,9 +1203,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) case D3D_ROOT_SIGNATURE_VERSION_1_2: #endif -/* GODOT start */ return d3d_D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); -/* GODOT end */ } return E_INVALIDARG; diff --git a/thirdparty/directx_headers/patches/0001-mingw-pragma.patch b/thirdparty/directx_headers/patches/0001-mingw-pragma.patch new file mode 100644 index 00000000000..cf7dd55e617 --- /dev/null +++ b/thirdparty/directx_headers/patches/0001-mingw-pragma.patch @@ -0,0 +1,25 @@ +diff --git a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h +index f061e79596..27c7f20448 100644 +--- a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h ++++ b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h +@@ -25,8 +25,10 @@ + struct DefaultSampleMask { operator UINT() noexcept { return UINT_MAX; } }; + struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() noexcept { return DXGI_SAMPLE_DESC{1, 0}; } }; + ++#if defined(_MSC_VER) + #pragma warning(push) + #pragma warning(disable : 4324) ++#endif + template + class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT + { +@@ -42,7 +44,9 @@ public: + InnerStructType* operator&() noexcept { return &pssInner; } + InnerStructType const* operator&() const noexcept { return &pssInner; } + }; ++#if defined(_MSC_VER) + #pragma warning(pop) ++#endif + typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; + typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; + typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; diff --git a/thirdparty/directx_headers/patches/patch_d3d12_dynamic_load.diff b/thirdparty/directx_headers/patches/0002-win7-8-dynamic-load.patch similarity index 80% rename from thirdparty/directx_headers/patches/patch_d3d12_dynamic_load.diff rename to thirdparty/directx_headers/patches/0002-win7-8-dynamic-load.patch index d520a441721..db7da3b83a1 100644 --- a/thirdparty/directx_headers/patches/patch_d3d12_dynamic_load.diff +++ b/thirdparty/directx_headers/patches/0002-win7-8-dynamic-load.patch @@ -1,28 +1,24 @@ diff --git a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h -index 572efed852..18efa7a0cb 100644 +index 572efed852..2da79d10f1 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h -@@ -996,6 +996,9 @@ struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE +@@ -996,6 +996,7 @@ struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE // two code paths for building root signatures, this helper method reconstructs a 1.0 signature when // 1.1 is not supported. inline HRESULT D3DX12SerializeVersionedRootSignature( -+/* GODOT start */ + _In_ HMODULE pLibD3D12, -+/* GODOT end */ _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, D3D_ROOT_SIGNATURE_VERSION MaxVersion, _Outptr_ ID3DBlob** ppBlob, -@@ -1006,13 +1009,22 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1006,13 +1007,18 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( *ppErrorBlob = nullptr; } -+ /* GODOT start */ -+ PFN_D3D12_SERIALIZE_ROOT_SIGNATURE d3d_D3D12SerializeRootSignature = (PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(void *)GetProcAddress(pLibD3D12, "D3D12SerializeRootSignature"); ++ PFN_D3D12_SERIALIZE_ROOT_SIGNATURE d3d_D3D12SerializeRootSignature = (PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(void *)GetProcAddress(pLibD3D12, "D3D12SerializeRootSignature"); + if (d3d_D3D12SerializeRootSignature == nullptr) { + return E_INVALIDARG; + } + PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE d3d_D3D12SerializeVersionedRootSignature = (PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)(void *)GetProcAddress(pLibD3D12, "D3D12SerializeVersionedRootSignature"); -+ /* GODOT end */ switch (MaxVersion) { case D3D_ROOT_SIGNATURE_VERSION_1_0: @@ -30,53 +26,43 @@ index 572efed852..18efa7a0cb 100644 { case D3D_ROOT_SIGNATURE_VERSION_1_0: - return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); -+/* GODOT start */ + return d3d_D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); -+/* GODOT end */ case D3D_ROOT_SIGNATURE_VERSION_1_1: #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -@@ -1114,7 +1126,9 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1114,7 +1120,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( if (SUCCEEDED(hr)) { const CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); - hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); -+/* GODOT start */ + hr = d3d_D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob); -+/* GODOT end */ } if (pParameters) -@@ -1145,7 +1159,9 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1145,7 +1151,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( { case D3D_ROOT_SIGNATURE_VERSION_1_0: case D3D_ROOT_SIGNATURE_VERSION_1_1: - return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); -+/* GODOT start */ + return d3d_D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); -+/* GODOT end */ #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) case D3D_ROOT_SIGNATURE_VERSION_1_2: -@@ -1181,7 +1197,9 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1181,7 +1187,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( if (SUCCEEDED(hr)) { const CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC desc(desc_1_1.NumParameters, desc_1_1.pParameters, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); - hr = D3D12SerializeVersionedRootSignature(&desc, ppBlob, ppErrorBlob); -+/* GODOT start */ + hr = d3d_D3D12SerializeVersionedRootSignature(&desc, ppBlob, ppErrorBlob); -+/* GODOT end */ } if (pStaticSamplers) -@@ -1197,7 +1215,9 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1197,7 +1203,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) case D3D_ROOT_SIGNATURE_VERSION_1_2: #endif - return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); -+/* GODOT start */ + return d3d_D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); -+/* GODOT end */ } return E_INVALIDARG; diff --git a/thirdparty/embree/common/algorithms/parallel_reduce.h b/thirdparty/embree/common/algorithms/parallel_reduce.h index 51ec0a64051..fbff38f6606 100644 --- a/thirdparty/embree/common/algorithms/parallel_reduce.h +++ b/thirdparty/embree/common/algorithms/parallel_reduce.h @@ -58,19 +58,15 @@ namespace embree const Value v = tbb::parallel_reduce(tbb::blocked_range(first,last,minStepSize),identity, [&](const tbb::blocked_range& r, const Value& start) { return reduction(start,func(range(r.begin(),r.end()))); }, reduction,context); - // -- GODOT start -- - // if (context.is_group_execution_cancelled()) - // throw std::runtime_error("task cancelled"); - // -- GODOT end -- + //if (context.is_group_execution_cancelled()) + // throw std::runtime_error("task cancelled"); return v; #else const Value v = tbb::parallel_reduce(tbb::blocked_range(first,last,minStepSize),identity, [&](const tbb::blocked_range& r, const Value& start) { return reduction(start,func(range(r.begin(),r.end()))); }, reduction); - // -- GODOT start -- - // if (tbb::task::self().is_cancelled()) - // throw std::runtime_error("task cancelled"); - // -- GODOT end -- + //if (tbb::task::self().is_cancelled()) + // throw std::runtime_error("task cancelled"); return v; #endif #else // TASKING_PPL diff --git a/thirdparty/embree/common/lexers/stringstream.cpp b/thirdparty/embree/common/lexers/stringstream.cpp index c93da0b420c..fa4266d0b9d 100644 --- a/thirdparty/embree/common/lexers/stringstream.cpp +++ b/thirdparty/embree/common/lexers/stringstream.cpp @@ -39,12 +39,10 @@ namespace embree std::vector str; str.reserve(64); while (cin->peek() != EOF && !isSeparator(cin->peek())) { int c = cin->get(); - // -- GODOT start -- - // if (!isValidChar(c)) throw std::runtime_error("invalid character "+std::string(1,c)+" in input"); + //if (!isValidChar(c)) throw std::runtime_error("invalid character "+std::string(1,c)+" in input"); if (!isValidChar(c)) { abort(); } - // -- GODOT end -- str.push_back((char)c); } str.push_back(0); diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h index 76579f94975..5a75ccff20e 100644 --- a/thirdparty/embree/common/simd/arm/sse2neon.h +++ b/thirdparty/embree/common/simd/arm/sse2neon.h @@ -102,9 +102,7 @@ #include #include -// -- GODOT start -- #if defined(_WIN32) && !defined(__MINGW32__) -// -- GODOT end -- /* Definitions for _mm_{malloc,free} are provided by * from both MinGW-w64 and MSVC. */ @@ -1890,13 +1888,11 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) #if !defined(SSE2NEON_ALLOC_DEFINED) FORCE_INLINE void _mm_free(void *addr) { -// -- GODOT start -- #if defined(_WIN32) _aligned_free(addr); #else free(addr); #endif -// -- GODOT end -- } #endif @@ -2088,7 +2084,6 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align) return malloc(size); if (align == 2 || (sizeof(void *) == 8 && align == 4)) align = sizeof(void *); -// -- GODOT start -- #if defined(_WIN32) ptr = _aligned_malloc(size, align); if (ptr) @@ -2097,7 +2092,6 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align) if (!posix_memalign(&ptr, align, size)) return ptr; #endif -// -- GODOT end -- return NULL; } #endif diff --git a/thirdparty/embree/common/sys/alloc.cpp b/thirdparty/embree/common/sys/alloc.cpp index 71616a39822..8e836460314 100644 --- a/thirdparty/embree/common/sys/alloc.cpp +++ b/thirdparty/embree/common/sys/alloc.cpp @@ -24,32 +24,28 @@ namespace embree void enableUSMAllocEmbree(sycl::context* context, sycl::device* device) { - // -- GODOT start -- - // if (tls_context_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); - // if (tls_device_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); + //if (tls_context_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); + //if (tls_device_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); if (tls_context_embree != nullptr) { abort(); } if (tls_device_embree != nullptr) { abort(); } - // -- GODOT end -- tls_context_embree = context; tls_device_embree = device; } void disableUSMAllocEmbree() { - // -- GODOT start -- - // if (tls_context_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); - // if (tls_device_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); + //if (tls_context_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); + //if (tls_device_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); if (tls_context_embree == nullptr) { abort(); } if (tls_device_embree == nullptr) { abort(); } - // -- GODOT end -- tls_context_embree = nullptr; tls_device_embree = nullptr; } @@ -64,16 +60,14 @@ namespace embree void disableUSMAllocTutorial() { - // -- GODOT start -- - // if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); - // if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); + //if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); + //if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); if (tls_context_tutorial == nullptr) { abort(); } if (tls_device_tutorial == nullptr) { abort(); } - // -- GODOT end -- tls_context_tutorial = nullptr; tls_device_tutorial = nullptr; @@ -88,13 +82,11 @@ namespace embree assert((align & (align-1)) == 0); void* ptr = _mm_malloc(size,align); - // -- GODOT start -- - // if (size != 0 && ptr == nullptr) - // throw std::bad_alloc(); + //if (size != 0 && ptr == nullptr) + // throw std::bad_alloc(); if (size != 0 && ptr == nullptr) { abort(); } - // -- GODOT end -- return ptr; } @@ -123,13 +115,11 @@ namespace embree else ptr = sycl::aligned_alloc_shared(align,size,*device,*context); - // -- GODOT start -- - // if (size != 0 && ptr == nullptr) - // throw std::bad_alloc(); + //if (size != 0 && ptr == nullptr) + // throw std::bad_alloc(); if (size != 0 && ptr == nullptr) { abort(); } - // -- GODOT end -- return ptr; } @@ -275,12 +265,10 @@ namespace embree /* fall back to 4k pages */ int flags = MEM_COMMIT | MEM_RESERVE; char* ptr = (char*) VirtualAlloc(nullptr,bytes,flags,PAGE_READWRITE); - // -- GODOT start -- - // if (ptr == nullptr) throw std::bad_alloc(); + //if (ptr == nullptr) throw std::bad_alloc(); if (ptr == nullptr) { abort(); } - // -- GODOT end -- hugepages = false; return ptr; } @@ -296,13 +284,11 @@ namespace embree if (bytesNew >= bytesOld) return bytesOld; - // -- GODOT start -- - // if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) - // throw std::bad_alloc(); + //if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) + // throw std::bad_alloc(); if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) { abort(); } - // -- GODOT end -- return bytesNew; } @@ -312,13 +298,11 @@ namespace embree if (bytes == 0) return; - // -- GODOT start -- - // if (!VirtualFree(ptr,0,MEM_RELEASE)) - // throw std::bad_alloc(); + //if (!VirtualFree(ptr,0,MEM_RELEASE)) + // throw std::bad_alloc(); if (!VirtualFree(ptr,0,MEM_RELEASE)) { abort(); } - // -- GODOT end -- } void os_advise(void *ptr, size_t bytes) @@ -422,12 +406,10 @@ namespace embree /* fallback to 4k pages */ void* ptr = (char*) mmap(0, bytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); - // -- GODOT start -- - // if (ptr == MAP_FAILED) throw std::bad_alloc(); + //if (ptr == MAP_FAILED) throw std::bad_alloc(); if (ptr == MAP_FAILED) { abort(); } - // -- GODOT end -- hugepages = false; /* advise huge page hint for THP */ @@ -443,13 +425,11 @@ namespace embree if (bytesNew >= bytesOld) return bytesOld; - // -- GODOT start -- - // if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) - // throw std::bad_alloc(); + //if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) + // throw std::bad_alloc(); if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) { abort(); } - // -- GODOT end -- return bytesNew; } @@ -462,13 +442,11 @@ namespace embree /* for hugepages we need to also align the size */ const size_t pageSize = hugepages ? PAGE_SIZE_2M : PAGE_SIZE_4K; bytes = (bytes+pageSize-1) & ~(pageSize-1); - // -- GODOT start -- - // if (munmap(ptr,bytes) == -1) - // throw std::bad_alloc(); + //if (munmap(ptr,bytes) == -1) + // throw std::bad_alloc(); if (munmap(ptr,bytes) == -1) { abort(); } - // -- GODOT end -- } /* hint for transparent huge pages (THP) */ diff --git a/thirdparty/embree/common/sys/alloc.h b/thirdparty/embree/common/sys/alloc.h index 28b17f988d8..e2c942049a3 100644 --- a/thirdparty/embree/common/sys/alloc.h +++ b/thirdparty/embree/common/sys/alloc.h @@ -160,10 +160,8 @@ namespace embree typedef std::ptrdiff_t difference_type; __forceinline pointer allocate( size_type n ) { - // -- GODOT start -- - // throw std::runtime_error("no allocation supported"); + //throw std::runtime_error("no allocation supported"); abort(); - // -- GODOT end -- } __forceinline void deallocate( pointer p, size_type n ) { diff --git a/thirdparty/embree/common/sys/platform.h b/thirdparty/embree/common/sys/platform.h index d4a9b9e119a..9f08cd1516b 100644 --- a/thirdparty/embree/common/sys/platform.h +++ b/thirdparty/embree/common/sys/platform.h @@ -213,19 +213,15 @@ #define UPRINT4(x,y,z,w) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << embree_endl #if defined(DEBUG) // only report file and line in debug mode - // -- GODOT start -- - // #define THROW_RUNTIME_ERROR(str) \ - // throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); + //#define THROW_RUNTIME_ERROR(str) \ + // throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); #define THROW_RUNTIME_ERROR(str) \ printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort(); - // -- GODOT end -- #else - // -- GODOT start -- - // #define THROW_RUNTIME_ERROR(str) \ - // throw std::runtime_error(str); + //#define THROW_RUNTIME_ERROR(str) \ + // throw std::runtime_error(str); #define THROW_RUNTIME_ERROR(str) \ abort(); - // -- GODOT end -- #endif #define FATAL(x) THROW_RUNTIME_ERROR(x) diff --git a/thirdparty/embree/common/sys/sysinfo.cpp b/thirdparty/embree/common/sys/sysinfo.cpp index 4ecab052659..4583e49b1ca 100644 --- a/thirdparty/embree/common/sys/sysinfo.cpp +++ b/thirdparty/embree/common/sys/sysinfo.cpp @@ -647,11 +647,9 @@ namespace embree #if defined(__EMSCRIPTEN__) #include -// -- GODOT start -- extern "C" { extern int godot_js_os_hw_concurrency_get(); } -// -- GODOT end -- #endif namespace embree @@ -665,9 +663,24 @@ namespace embree nThreads = sysconf(_SC_NPROCESSORS_ONLN); // does not work in Linux LXC container assert(nThreads); #elif defined(__EMSCRIPTEN__) - // -- GODOT start -- nThreads = godot_js_os_hw_concurrency_get(); - // -- GODOT end -- +#if 0 + // WebAssembly supports pthreads, but not pthread_getaffinity_np. Get the number of logical + // threads from the browser or Node.js using JavaScript. + nThreads = MAIN_THREAD_EM_ASM_INT({ + const isBrowser = typeof window !== 'undefined'; + const isNode = typeof process !== 'undefined' && process.versions != null && + process.versions.node != null; + if (isBrowser) { + // Return 1 if the browser does not expose hardwareConcurrency. + return window.navigator.hardwareConcurrency || 1; + } else if (isNode) { + return require('os').cpus().length; + } else { + return 1; + } + }); +#endif #else cpu_set_t set; if (pthread_getaffinity_np(pthread_self(), sizeof(set), &set) == 0) diff --git a/thirdparty/embree/common/tasking/taskschedulerinternal.cpp b/thirdparty/embree/common/tasking/taskschedulerinternal.cpp index 88b88a30ec5..e89ae04f8bd 100644 --- a/thirdparty/embree/common/tasking/taskschedulerinternal.cpp +++ b/thirdparty/embree/common/tasking/taskschedulerinternal.cpp @@ -48,15 +48,13 @@ namespace embree { Task* prevTask = thread.task; thread.task = this; - // -- GODOT start -- - // try { - // if (context->cancellingException == nullptr) + //try { + // if (context->cancellingException == nullptr) closure->execute(); - // } catch (...) { - // if (context->cancellingException == nullptr) - // context->cancellingException = std::current_exception(); - // } - // -- GODOT end -- + //} catch (...) { + // if (context->cancellingException == nullptr) + // context->cancellingException = std::current_exception(); + //} thread.task = prevTask; add_dependencies(-1); } diff --git a/thirdparty/embree/common/tasking/taskschedulerinternal.h b/thirdparty/embree/common/tasking/taskschedulerinternal.h index 8e3befb739f..4a04323b80a 100644 --- a/thirdparty/embree/common/tasking/taskschedulerinternal.h +++ b/thirdparty/embree/common/tasking/taskschedulerinternal.h @@ -130,13 +130,11 @@ namespace embree __forceinline void* alloc(size_t bytes, size_t align = 64) { size_t ofs = bytes + ((align - stackPtr) & (align-1)); - // -- GODOT start -- - // if (stackPtr + ofs > CLOSURE_STACK_SIZE) - // throw std::runtime_error("closure stack overflow"); + //if (stackPtr + ofs > CLOSURE_STACK_SIZE) + // throw std::runtime_error("closure stack overflow"); if (stackPtr + ofs > CLOSURE_STACK_SIZE) { abort(); } - // -- GODOT end -- stackPtr += ofs; return &stack[stackPtr-bytes]; } @@ -144,13 +142,11 @@ namespace embree template __forceinline void push_right(Thread& thread, const size_t size, const Closure& closure, TaskGroupContext* context) { - // -- GODOT start -- - // if (right >= TASK_STACK_SIZE) - // throw std::runtime_error("task stack overflow"); + //if (right >= TASK_STACK_SIZE) + // throw std::runtime_error("task stack overflow"); if (right >= TASK_STACK_SIZE) { abort(); } - // -- GODOT end -- /* allocate new task on right side of stack */ size_t oldStackPtr = stackPtr; diff --git a/thirdparty/embree/kernels/bvh/bvh_statistics.cpp b/thirdparty/embree/kernels/bvh/bvh_statistics.cpp index 57f75bfd7e8..7ea9736c5c8 100644 --- a/thirdparty/embree/kernels/bvh/bvh_statistics.cpp +++ b/thirdparty/embree/kernels/bvh/bvh_statistics.cpp @@ -150,10 +150,8 @@ namespace embree } } else { - // -- GODOT start -- - // throw std::runtime_error("not supported node type in bvh_statistics"); + //throw std::runtime_error("not supported node type in bvh_statistics"); abort(); - // -- GODOT end -- } return s; } diff --git a/thirdparty/embree/kernels/common/alloc.h b/thirdparty/embree/kernels/common/alloc.h index 840d48c327b..8ac22e53ec7 100644 --- a/thirdparty/embree/kernels/common/alloc.h +++ b/thirdparty/embree/kernels/common/alloc.h @@ -189,13 +189,11 @@ namespace embree , atype(osAllocation ? EMBREE_OS_MALLOC : ALIGNED_MALLOC) , primrefarray(device,0) { - // -- GODOT start -- - // if (osAllocation && useUSM) - // throw std::runtime_error("USM allocation cannot be combined with OS allocation."); + //if (osAllocation && useUSM) + // throw std::runtime_error("USM allocation cannot be combined with OS allocation."); if (osAllocation && useUSM) { abort(); } - // -- GODOT end -- for (size_t i=0; imalloc(device,bytes,align,partial); - // -- GODOT start -- - // if (ptr == nullptr && !blockAllocation) - // throw std::bad_alloc(); + //if (ptr == nullptr && !blockAllocation) + // throw std::bad_alloc(); if (ptr == nullptr && !blockAllocation) { abort(); } - // -- GODOT end -- if (ptr) return ptr; } diff --git a/thirdparty/embree/kernels/common/rtcore.cpp b/thirdparty/embree/kernels/common/rtcore.cpp index eb8d2c0a587..e19c243bf68 100644 --- a/thirdparty/embree/kernels/common/rtcore.cpp +++ b/thirdparty/embree/kernels/common/rtcore.cpp @@ -257,17 +257,15 @@ RTC_NAMESPACE_BEGIN; RTC_TRACE(rtcSetSceneBuildQuality); RTC_VERIFY_HANDLE(hscene); RTC_ENTER_DEVICE(hscene); - // -- GODOT start -- - // if (quality != RTC_BUILD_QUALITY_LOW && - // quality != RTC_BUILD_QUALITY_MEDIUM && - // quality != RTC_BUILD_QUALITY_HIGH) - // throw std::runtime_error("invalid build quality"); + //if (quality != RTC_BUILD_QUALITY_LOW && + // quality != RTC_BUILD_QUALITY_MEDIUM && + // quality != RTC_BUILD_QUALITY_HIGH) + // throw std::runtime_error("invalid build quality"); if (quality != RTC_BUILD_QUALITY_LOW && quality != RTC_BUILD_QUALITY_MEDIUM && quality != RTC_BUILD_QUALITY_HIGH) { abort(); } - // -- GODOT end -- scene->setBuildQuality(quality); RTC_CATCH_END2(scene); } @@ -1570,19 +1568,17 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte RTC_TRACE(rtcSetGeometryBuildQuality); RTC_VERIFY_HANDLE(hgeometry); RTC_ENTER_DEVICE(hgeometry); - // -- GODOT start -- - // if (quality != RTC_BUILD_QUALITY_LOW && - // quality != RTC_BUILD_QUALITY_MEDIUM && - // quality != RTC_BUILD_QUALITY_HIGH && - // quality != RTC_BUILD_QUALITY_REFIT) - // throw std::runtime_error("invalid build quality"); + //if (quality != RTC_BUILD_QUALITY_LOW && + // quality != RTC_BUILD_QUALITY_MEDIUM && + // quality != RTC_BUILD_QUALITY_HIGH && + // quality != RTC_BUILD_QUALITY_REFIT) + // throw std::runtime_error("invalid build quality"); if (quality != RTC_BUILD_QUALITY_LOW && quality != RTC_BUILD_QUALITY_MEDIUM && quality != RTC_BUILD_QUALITY_HIGH && quality != RTC_BUILD_QUALITY_REFIT) { abort(); } - // -- GODOT end -- geometry->setBuildQuality(quality); RTC_CATCH_END2(geometry); } diff --git a/thirdparty/embree/kernels/common/rtcore.h b/thirdparty/embree/kernels/common/rtcore.h index 47526482c11..cd7a6f43952 100644 --- a/thirdparty/embree/kernels/common/rtcore.h +++ b/thirdparty/embree/kernels/common/rtcore.h @@ -13,13 +13,13 @@ namespace embree __forceinline bool isIncoherent(RTCRayQueryFlags flags) { return (flags & RTC_RAY_QUERY_FLAG_COHERENT) == RTC_RAY_QUERY_FLAG_INCOHERENT; } /*! Macros used in the rtcore API implementation */ -// -- GODOT start -- -#define RTC_CATCH_BEGIN -#define RTC_CATCH_END(device) -#define RTC_CATCH_END2(scene) -#define RTC_CATCH_END2_FALSE(scene) return false; -#if 0 -// -- GODOT end -- +#if 1 +# define RTC_CATCH_BEGIN +# define RTC_CATCH_END(device) +# define RTC_CATCH_END2(scene) +# define RTC_CATCH_END2_FALSE(scene) return false; +#else + #define RTC_CATCH_BEGIN try { #define RTC_CATCH_END(device) \ @@ -94,7 +94,6 @@ namespace embree #define RTC_TRACE(x) #endif -// -- GODOT start -- #if 0 /*! used to throw embree API errors */ struct rtcore_error : public std::exception @@ -116,13 +115,12 @@ namespace embree #if defined(DEBUG) // only report file and line in debug mode #define throw_RTCError(error,str) \ printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort(); - // throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); + //throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); #else #define throw_RTCError(error,str) \ abort(); - // throw rtcore_error(error,str); + //throw rtcore_error(error,str); #endif -// -- GODOT end -- #define RTC_BUILD_ARGUMENTS_HAS(settings,member) \ (settings.byteSize > (offsetof(RTCBuildArguments,member)+sizeof(settings.member))) diff --git a/thirdparty/embree/kernels/common/scene.cpp b/thirdparty/embree/kernels/common/scene.cpp index 10cb3c4becb..706cc512dfb 100644 --- a/thirdparty/embree/kernels/common/scene.cpp +++ b/thirdparty/embree/kernels/common/scene.cpp @@ -894,18 +894,16 @@ namespace embree } /* initiate build */ - // -- GODOT start -- - // try { + //try { TaskScheduler::TaskGroupContext context; scheduler->spawn_root([&]() { commit_task(); Lock lock(taskGroup->schedulerMutex); taskGroup->scheduler = nullptr; }, &context, 1, !join); - // } - // catch (...) { - // accels_clear(); - // Lock lock(taskGroup->schedulerMutex); - // taskGroup->scheduler = nullptr; - // throw; - // } - // -- GODOT end -- + //} + //catch (...) { + // accels_clear(); + // Lock lock(taskGroup->schedulerMutex); + // taskGroup->scheduler = nullptr; + // throw; + //} } #endif diff --git a/thirdparty/embree/kernels/common/state.cpp b/thirdparty/embree/kernels/common/state.cpp index 1d73ae9629e..8e83c95bd7e 100644 --- a/thirdparty/embree/kernels/common/state.cpp +++ b/thirdparty/embree/kernels/common/state.cpp @@ -194,15 +194,13 @@ namespace embree bool State::parseFile(const FileName& fileName) { Ref > file; - // -- GODOT start -- - // try { + //try { file = new FileStream(fileName); - // } - // catch (std::runtime_error& e) { - // (void) e; - // return false; - // } - // -- GODOT end -- + //} + //catch (std::runtime_error& e) { + // (void) e; + // return false; + //} std::vector syms; for (size_t i=0; i(first,last,minStepSize),identity, [&](const tbb::blocked_range& r, const Value& start) { return reduction(start,func(range(r.begin(),r.end()))); }, reduction,context); - if (context.is_group_execution_cancelled()) - throw std::runtime_error("task cancelled"); -+ // -- GODOT start -- -+ // if (context.is_group_execution_cancelled()) -+ // throw std::runtime_error("task cancelled"); -+ // -- GODOT end -- ++ //if (context.is_group_execution_cancelled()) ++ // throw std::runtime_error("task cancelled"); return v; #else const Value v = tbb::parallel_reduce(tbb::blocked_range(first,last,minStepSize),identity, @@ -19,51 +17,45 @@ index b52b1e2e13..51ec0a6405 100644 reduction); - if (tbb::task::self().is_cancelled()) - throw std::runtime_error("task cancelled"); -+ // -- GODOT start -- -+ // if (tbb::task::self().is_cancelled()) -+ // throw std::runtime_error("task cancelled"); -+ // -- GODOT end -- ++ //if (tbb::task::self().is_cancelled()) ++ // throw std::runtime_error("task cancelled"); return v; #endif #else // TASKING_PPL diff --git a/thirdparty/embree/common/lexers/stringstream.cpp b/thirdparty/embree/common/lexers/stringstream.cpp -index 42ffb10176..c93da0b420 100644 +index 42ffb10176..fa4266d0b9 100644 --- a/thirdparty/embree/common/lexers/stringstream.cpp +++ b/thirdparty/embree/common/lexers/stringstream.cpp -@@ -39,7 +39,12 @@ namespace embree +@@ -39,7 +39,10 @@ namespace embree std::vector str; str.reserve(64); while (cin->peek() != EOF && !isSeparator(cin->peek())) { int c = cin->get(); - if (!isValidChar(c)) throw std::runtime_error("invalid character "+std::string(1,c)+" in input"); -+ // -- GODOT start -- -+ // if (!isValidChar(c)) throw std::runtime_error("invalid character "+std::string(1,c)+" in input"); ++ //if (!isValidChar(c)) throw std::runtime_error("invalid character "+std::string(1,c)+" in input"); + if (!isValidChar(c)) { + abort(); + } -+ // -- GODOT end -- str.push_back((char)c); } str.push_back(0); diff --git a/thirdparty/embree/common/sys/alloc.cpp b/thirdparty/embree/common/sys/alloc.cpp -index de225fafc6..71616a3982 100644 +index de225fafc6..8e83646031 100644 --- a/thirdparty/embree/common/sys/alloc.cpp +++ b/thirdparty/embree/common/sys/alloc.cpp -@@ -24,16 +24,32 @@ namespace embree +@@ -24,16 +24,28 @@ namespace embree void enableUSMAllocEmbree(sycl::context* context, sycl::device* device) { - if (tls_context_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); - if (tls_device_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); -+ // -- GODOT start -- -+ // if (tls_context_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); -+ // if (tls_device_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); ++ //if (tls_context_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); ++ //if (tls_device_embree != nullptr) throw std::runtime_error("USM allocation already enabled"); + if (tls_context_embree != nullptr) { + abort(); + } + if (tls_device_embree != nullptr) { + abort(); + } -+ // -- GODOT end -- tls_context_embree = context; tls_device_embree = device; } @@ -72,331 +64,292 @@ index de225fafc6..71616a3982 100644 { - if (tls_context_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); - if (tls_device_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); -+ // -- GODOT start -- -+ // if (tls_context_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); -+ // if (tls_device_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); ++ //if (tls_context_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); ++ //if (tls_device_embree == nullptr) throw std::runtime_error("USM allocation not enabled"); + if (tls_context_embree == nullptr) { + abort(); + } + if (tls_device_embree == nullptr) { + abort(); + } -+ // -- GODOT end -- tls_context_embree = nullptr; tls_device_embree = nullptr; } -@@ -48,8 +64,16 @@ namespace embree +@@ -48,8 +60,14 @@ namespace embree void disableUSMAllocTutorial() { - if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); - if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); -+ // -- GODOT start -- -+ // if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); -+ // if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); ++ //if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); ++ //if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled"); + if (tls_context_tutorial == nullptr) { + abort(); + } + if (tls_device_tutorial == nullptr) { + abort(); + } -+ // -- GODOT end -- tls_context_tutorial = nullptr; tls_device_tutorial = nullptr; -@@ -64,8 +88,13 @@ namespace embree +@@ -64,8 +82,11 @@ namespace embree assert((align & (align-1)) == 0); void* ptr = _mm_malloc(size,align); - if (size != 0 && ptr == nullptr) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (size != 0 && ptr == nullptr) -+ // throw std::bad_alloc(); ++ //if (size != 0 && ptr == nullptr) ++ // throw std::bad_alloc(); + if (size != 0 && ptr == nullptr) { + abort(); + } -+ // -- GODOT end -- return ptr; } -@@ -94,8 +123,13 @@ namespace embree +@@ -94,8 +115,11 @@ namespace embree else ptr = sycl::aligned_alloc_shared(align,size,*device,*context); - if (size != 0 && ptr == nullptr) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (size != 0 && ptr == nullptr) -+ // throw std::bad_alloc(); ++ //if (size != 0 && ptr == nullptr) ++ // throw std::bad_alloc(); + if (size != 0 && ptr == nullptr) { + abort(); + } -+ // -- GODOT end -- return ptr; } -@@ -241,7 +275,12 @@ namespace embree +@@ -241,7 +265,10 @@ namespace embree /* fall back to 4k pages */ int flags = MEM_COMMIT | MEM_RESERVE; char* ptr = (char*) VirtualAlloc(nullptr,bytes,flags,PAGE_READWRITE); - if (ptr == nullptr) throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (ptr == nullptr) throw std::bad_alloc(); ++ //if (ptr == nullptr) throw std::bad_alloc(); + if (ptr == nullptr) { + abort(); + } -+ // -- GODOT end -- hugepages = false; return ptr; } -@@ -257,8 +296,13 @@ namespace embree +@@ -257,8 +284,11 @@ namespace embree if (bytesNew >= bytesOld) return bytesOld; - if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) -+ // throw std::bad_alloc(); ++ //if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) ++ // throw std::bad_alloc(); + if (!VirtualFree((char*)ptr+bytesNew,bytesOld-bytesNew,MEM_DECOMMIT)) { + abort(); + } -+ // -- GODOT end -- return bytesNew; } -@@ -268,8 +312,13 @@ namespace embree +@@ -268,8 +298,11 @@ namespace embree if (bytes == 0) return; - if (!VirtualFree(ptr,0,MEM_RELEASE)) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (!VirtualFree(ptr,0,MEM_RELEASE)) -+ // throw std::bad_alloc(); ++ //if (!VirtualFree(ptr,0,MEM_RELEASE)) ++ // throw std::bad_alloc(); + if (!VirtualFree(ptr,0,MEM_RELEASE)) { + abort(); + } -+ // -- GODOT end -- } void os_advise(void *ptr, size_t bytes) -@@ -373,7 +422,12 @@ namespace embree +@@ -373,7 +406,10 @@ namespace embree /* fallback to 4k pages */ void* ptr = (char*) mmap(0, bytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); - if (ptr == MAP_FAILED) throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (ptr == MAP_FAILED) throw std::bad_alloc(); ++ //if (ptr == MAP_FAILED) throw std::bad_alloc(); + if (ptr == MAP_FAILED) { + abort(); + } -+ // -- GODOT end -- hugepages = false; /* advise huge page hint for THP */ -@@ -389,8 +443,13 @@ namespace embree +@@ -389,8 +425,11 @@ namespace embree if (bytesNew >= bytesOld) return bytesOld; - if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) -+ // throw std::bad_alloc(); ++ //if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) ++ // throw std::bad_alloc(); + if (munmap((char*)ptr+bytesNew,bytesOld-bytesNew) == -1) { + abort(); + } -+ // -- GODOT end -- return bytesNew; } -@@ -403,8 +462,13 @@ namespace embree +@@ -403,8 +442,11 @@ namespace embree /* for hugepages we need to also align the size */ const size_t pageSize = hugepages ? PAGE_SIZE_2M : PAGE_SIZE_4K; bytes = (bytes+pageSize-1) & ~(pageSize-1); - if (munmap(ptr,bytes) == -1) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (munmap(ptr,bytes) == -1) -+ // throw std::bad_alloc(); ++ //if (munmap(ptr,bytes) == -1) ++ // throw std::bad_alloc(); + if (munmap(ptr,bytes) == -1) { + abort(); + } -+ // -- GODOT end -- } /* hint for transparent huge pages (THP) */ diff --git a/thirdparty/embree/common/sys/alloc.h b/thirdparty/embree/common/sys/alloc.h -index e19c2c221a..28b17f988d 100644 +index e19c2c221a..e2c942049a 100644 --- a/thirdparty/embree/common/sys/alloc.h +++ b/thirdparty/embree/common/sys/alloc.h -@@ -160,7 +160,10 @@ namespace embree +@@ -160,7 +160,8 @@ namespace embree typedef std::ptrdiff_t difference_type; __forceinline pointer allocate( size_type n ) { - throw std::runtime_error("no allocation supported"); -+ // -- GODOT start -- -+ // throw std::runtime_error("no allocation supported"); ++ //throw std::runtime_error("no allocation supported"); + abort(); -+ // -- GODOT end -- } __forceinline void deallocate( pointer p, size_type n ) { diff --git a/thirdparty/embree/common/sys/platform.h b/thirdparty/embree/common/sys/platform.h -index 6dc0cf3318..d4a9b9e119 100644 +index 6dc0cf3318..9f08cd1516 100644 --- a/thirdparty/embree/common/sys/platform.h +++ b/thirdparty/embree/common/sys/platform.h -@@ -213,11 +213,19 @@ +@@ -213,11 +213,15 @@ #define UPRINT4(x,y,z,w) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << embree_endl #if defined(DEBUG) // only report file and line in debug mode -+ // -- GODOT start -- -+ // #define THROW_RUNTIME_ERROR(str) \ -+ // throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); ++ //#define THROW_RUNTIME_ERROR(str) \ ++ // throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); #define THROW_RUNTIME_ERROR(str) \ - throw std::runtime_error(std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); + printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort(); -+ // -- GODOT end -- #else -+ // -- GODOT start -- -+ // #define THROW_RUNTIME_ERROR(str) \ -+ // throw std::runtime_error(str); ++ //#define THROW_RUNTIME_ERROR(str) \ ++ // throw std::runtime_error(str); #define THROW_RUNTIME_ERROR(str) \ - throw std::runtime_error(str); + abort(); -+ // -- GODOT end -- #endif #define FATAL(x) THROW_RUNTIME_ERROR(x) diff --git a/thirdparty/embree/common/tasking/taskschedulerinternal.cpp b/thirdparty/embree/common/tasking/taskschedulerinternal.cpp -index 83ead95122..88b88a30ec 100644 +index 83ead95122..e89ae04f8b 100644 --- a/thirdparty/embree/common/tasking/taskschedulerinternal.cpp +++ b/thirdparty/embree/common/tasking/taskschedulerinternal.cpp -@@ -48,13 +48,15 @@ namespace embree +@@ -48,13 +48,13 @@ namespace embree { Task* prevTask = thread.task; thread.task = this; - try { - if (context->cancellingException == nullptr) -+ // -- GODOT start -- -+ // try { -+ // if (context->cancellingException == nullptr) ++ //try { ++ // if (context->cancellingException == nullptr) closure->execute(); - } catch (...) { - if (context->cancellingException == nullptr) - context->cancellingException = std::current_exception(); - } -+ // } catch (...) { -+ // if (context->cancellingException == nullptr) -+ // context->cancellingException = std::current_exception(); -+ // } -+ // -- GODOT end -- ++ //} catch (...) { ++ // if (context->cancellingException == nullptr) ++ // context->cancellingException = std::current_exception(); ++ //} thread.task = prevTask; add_dependencies(-1); } diff --git a/thirdparty/embree/common/tasking/taskschedulerinternal.h b/thirdparty/embree/common/tasking/taskschedulerinternal.h -index 355648b3f8..e72d3b72ba 100644 +index b01bebf7c3..4a04323b80 100644 --- a/thirdparty/embree/common/tasking/taskschedulerinternal.h +++ b/thirdparty/embree/common/tasking/taskschedulerinternal.h -@@ -130,8 +130,13 @@ namespace embree +@@ -130,8 +130,11 @@ namespace embree __forceinline void* alloc(size_t bytes, size_t align = 64) { size_t ofs = bytes + ((align - stackPtr) & (align-1)); - if (stackPtr + ofs > CLOSURE_STACK_SIZE) - throw std::runtime_error("closure stack overflow"); -+ // -- GODOT start -- -+ // if (stackPtr + ofs > CLOSURE_STACK_SIZE) -+ // throw std::runtime_error("closure stack overflow"); ++ //if (stackPtr + ofs > CLOSURE_STACK_SIZE) ++ // throw std::runtime_error("closure stack overflow"); + if (stackPtr + ofs > CLOSURE_STACK_SIZE) { + abort(); + } -+ // -- GODOT end -- stackPtr += ofs; return &stack[stackPtr-bytes]; } -@@ -139,8 +144,13 @@ namespace embree +@@ -139,8 +142,11 @@ namespace embree template __forceinline void push_right(Thread& thread, const size_t size, const Closure& closure, TaskGroupContext* context) { - if (right >= TASK_STACK_SIZE) - throw std::runtime_error("task stack overflow"); -+ // -- GODOT start -- -+ // if (right >= TASK_STACK_SIZE) -+ // throw std::runtime_error("task stack overflow"); ++ //if (right >= TASK_STACK_SIZE) ++ // throw std::runtime_error("task stack overflow"); + if (right >= TASK_STACK_SIZE) { + abort(); + } -+ // -- GODOT end -- /* allocate new task on right side of stack */ size_t oldStackPtr = stackPtr; diff --git a/thirdparty/embree/kernels/bvh/bvh_statistics.cpp b/thirdparty/embree/kernels/bvh/bvh_statistics.cpp -index 40f9043736..57f75bfd7e 100644 +index 40f9043736..7ea9736c5c 100644 --- a/thirdparty/embree/kernels/bvh/bvh_statistics.cpp +++ b/thirdparty/embree/kernels/bvh/bvh_statistics.cpp -@@ -150,7 +150,10 @@ namespace embree +@@ -150,7 +150,8 @@ namespace embree } } else { - throw std::runtime_error("not supported node type in bvh_statistics"); -+ // -- GODOT start -- -+ // throw std::runtime_error("not supported node type in bvh_statistics"); ++ //throw std::runtime_error("not supported node type in bvh_statistics"); + abort(); -+ // -- GODOT end -- } return s; } diff --git a/thirdparty/embree/kernels/common/alloc.h b/thirdparty/embree/kernels/common/alloc.h -index 2bd292de4d..840d48c327 100644 +index 2bd292de4d..8ac22e53ec 100644 --- a/thirdparty/embree/kernels/common/alloc.h +++ b/thirdparty/embree/kernels/common/alloc.h -@@ -189,8 +189,13 @@ namespace embree +@@ -189,8 +189,11 @@ namespace embree , atype(osAllocation ? EMBREE_OS_MALLOC : ALIGNED_MALLOC) , primrefarray(device,0) { - if (osAllocation && useUSM) - throw std::runtime_error("USM allocation cannot be combined with OS allocation."); -+ // -- GODOT start -- -+ // if (osAllocation && useUSM) -+ // throw std::runtime_error("USM allocation cannot be combined with OS allocation."); ++ //if (osAllocation && useUSM) ++ // throw std::runtime_error("USM allocation cannot be combined with OS allocation."); + if (osAllocation && useUSM) { + abort(); + } -+ // -- GODOT end -- for (size_t i=0; imalloc(device,bytes,align,partial); - if (ptr == nullptr && !blockAllocation) - throw std::bad_alloc(); -+ // -- GODOT start -- -+ // if (ptr == nullptr && !blockAllocation) -+ // throw std::bad_alloc(); ++ //if (ptr == nullptr && !blockAllocation) ++ // throw std::bad_alloc(); + if (ptr == nullptr && !blockAllocation) { + abort(); + } -+ // -- GODOT end -- if (ptr) return ptr; } diff --git a/thirdparty/embree/kernels/common/rtcore.cpp b/thirdparty/embree/kernels/common/rtcore.cpp -index 8dc5d7045b..eb8d2c0a58 100644 +index 8dc5d7045b..e19c243bf6 100644 --- a/thirdparty/embree/kernels/common/rtcore.cpp +++ b/thirdparty/embree/kernels/common/rtcore.cpp -@@ -257,10 +257,17 @@ RTC_NAMESPACE_BEGIN; +@@ -257,10 +257,15 @@ RTC_NAMESPACE_BEGIN; RTC_TRACE(rtcSetSceneBuildQuality); RTC_VERIFY_HANDLE(hscene); RTC_ENTER_DEVICE(hscene); -+ // -- GODOT start -- -+ // if (quality != RTC_BUILD_QUALITY_LOW && -+ // quality != RTC_BUILD_QUALITY_MEDIUM && -+ // quality != RTC_BUILD_QUALITY_HIGH) -+ // throw std::runtime_error("invalid build quality"); ++ //if (quality != RTC_BUILD_QUALITY_LOW && ++ // quality != RTC_BUILD_QUALITY_MEDIUM && ++ // quality != RTC_BUILD_QUALITY_HIGH) ++ // throw std::runtime_error("invalid build quality"); if (quality != RTC_BUILD_QUALITY_LOW && quality != RTC_BUILD_QUALITY_MEDIUM && - quality != RTC_BUILD_QUALITY_HIGH) @@ -404,20 +357,18 @@ index 8dc5d7045b..eb8d2c0a58 100644 + quality != RTC_BUILD_QUALITY_HIGH) { + abort(); + } -+ // -- GODOT end -- scene->setBuildQuality(quality); RTC_CATCH_END2(scene); } -@@ -1563,11 +1570,19 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte +@@ -1563,11 +1568,17 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte RTC_TRACE(rtcSetGeometryBuildQuality); RTC_VERIFY_HANDLE(hgeometry); RTC_ENTER_DEVICE(hgeometry); -+ // -- GODOT start -- -+ // if (quality != RTC_BUILD_QUALITY_LOW && -+ // quality != RTC_BUILD_QUALITY_MEDIUM && -+ // quality != RTC_BUILD_QUALITY_HIGH && -+ // quality != RTC_BUILD_QUALITY_REFIT) -+ // throw std::runtime_error("invalid build quality"); ++ //if (quality != RTC_BUILD_QUALITY_LOW && ++ // quality != RTC_BUILD_QUALITY_MEDIUM && ++ // quality != RTC_BUILD_QUALITY_HIGH && ++ // quality != RTC_BUILD_QUALITY_REFIT) ++ // throw std::runtime_error("invalid build quality"); if (quality != RTC_BUILD_QUALITY_LOW && quality != RTC_BUILD_QUALITY_MEDIUM && quality != RTC_BUILD_QUALITY_HIGH && @@ -426,44 +377,31 @@ index 8dc5d7045b..eb8d2c0a58 100644 + quality != RTC_BUILD_QUALITY_REFIT) { + abort(); + } -+ // -- GODOT end -- geometry->setBuildQuality(quality); RTC_CATCH_END2(geometry); } diff --git a/thirdparty/embree/kernels/common/rtcore.h b/thirdparty/embree/kernels/common/rtcore.h -index 73a061de11..47526482c1 100644 +index 73a061de11..cd7a6f4395 100644 --- a/thirdparty/embree/kernels/common/rtcore.h +++ b/thirdparty/embree/kernels/common/rtcore.h -@@ -13,13 +13,13 @@ namespace embree +@@ -13,7 +13,7 @@ namespace embree __forceinline bool isIncoherent(RTCRayQueryFlags flags) { return (flags & RTC_RAY_QUERY_FLAG_COHERENT) == RTC_RAY_QUERY_FLAG_INCOHERENT; } /*! Macros used in the rtcore API implementation */ -+// -- GODOT start -- -+#define RTC_CATCH_BEGIN -+#define RTC_CATCH_END(device) -+#define RTC_CATCH_END2(scene) -+#define RTC_CATCH_END2_FALSE(scene) return false; - #if 0 --# define RTC_CATCH_BEGIN --# define RTC_CATCH_END(device) --# define RTC_CATCH_END2(scene) --# define RTC_CATCH_END2_FALSE(scene) return false; --#else -- -+// -- GODOT end -- - #define RTC_CATCH_BEGIN try { - - #define RTC_CATCH_END(device) \ -@@ -94,6 +94,8 @@ namespace embree +-#if 0 ++#if 1 + # define RTC_CATCH_BEGIN + # define RTC_CATCH_END(device) + # define RTC_CATCH_END2(scene) +@@ -94,6 +94,7 @@ namespace embree #define RTC_TRACE(x) #endif -+// -- GODOT start -- +#if 0 /*! used to throw embree API errors */ struct rtcore_error : public std::exception { -@@ -109,14 +111,18 @@ namespace embree +@@ -109,13 +110,16 @@ namespace embree RTCError error; std::string str; }; @@ -473,28 +411,25 @@ index 73a061de11..47526482c1 100644 #define throw_RTCError(error,str) \ - throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); + printf("%s (%d): %s", __FILE__, __LINE__, std::string(str).c_str()), abort(); -+ // throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); ++ //throw rtcore_error(error,std::string(__FILE__) + " (" + toString(__LINE__) + "): " + std::string(str)); #else #define throw_RTCError(error,str) \ - throw rtcore_error(error,str); + abort(); -+ // throw rtcore_error(error,str); ++ //throw rtcore_error(error,str); #endif -+// -- GODOT end -- #define RTC_BUILD_ARGUMENTS_HAS(settings,member) \ - (settings.byteSize > (offsetof(RTCBuildArguments,member)+sizeof(settings.member))) diff --git a/thirdparty/embree/kernels/common/scene.cpp b/thirdparty/embree/kernels/common/scene.cpp -index fda8dd938a..10cb3c4bec 100644 +index fda8dd938a..706cc512df 100644 --- a/thirdparty/embree/kernels/common/scene.cpp +++ b/thirdparty/embree/kernels/common/scene.cpp -@@ -894,16 +894,18 @@ namespace embree +@@ -894,16 +894,16 @@ namespace embree } /* initiate build */ - try { -+ // -- GODOT start -- -+ // try { ++ //try { TaskScheduler::TaskGroupContext context; scheduler->spawn_root([&]() { commit_task(); Lock lock(taskGroup->schedulerMutex); taskGroup->scheduler = nullptr; }, &context, 1, !join); - } @@ -504,40 +439,37 @@ index fda8dd938a..10cb3c4bec 100644 - taskGroup->scheduler = nullptr; - throw; - } -+ // } -+ // catch (...) { -+ // accels_clear(); -+ // Lock lock(taskGroup->schedulerMutex); -+ // taskGroup->scheduler = nullptr; -+ // throw; -+ // } -+ // -- GODOT end -- ++ //} ++ //catch (...) { ++ // accels_clear(); ++ // Lock lock(taskGroup->schedulerMutex); ++ // taskGroup->scheduler = nullptr; ++ // throw; ++ //} } #endif diff --git a/thirdparty/embree/kernels/common/state.cpp b/thirdparty/embree/kernels/common/state.cpp -index 4e3ab6ddfb..1d73ae9629 100644 +index 4e3ab6ddfb..8e83c95bd7 100644 --- a/thirdparty/embree/kernels/common/state.cpp +++ b/thirdparty/embree/kernels/common/state.cpp -@@ -194,13 +194,15 @@ namespace embree +@@ -194,13 +194,13 @@ namespace embree bool State::parseFile(const FileName& fileName) { Ref > file; - try { -+ // -- GODOT start -- -+ // try { ++ //try { file = new FileStream(fileName); - } - catch (std::runtime_error& e) { - (void) e; - return false; - } -+ // } -+ // catch (std::runtime_error& e) { -+ // (void) e; -+ // return false; -+ // } -+ // -- GODOT end -- ++ //} ++ //catch (std::runtime_error& e) { ++ // (void) e; ++ // return false; ++ //} std::vector syms; for (size_t i=0; i ++ ++extern "C" { ++extern int godot_js_os_hw_concurrency_get(); ++} + #endif + + namespace embree +@@ -659,6 +663,8 @@ namespace embree + nThreads = sysconf(_SC_NPROCESSORS_ONLN); // does not work in Linux LXC container + assert(nThreads); + #elif defined(__EMSCRIPTEN__) ++ nThreads = godot_js_os_hw_concurrency_get(); ++#if 0 + // WebAssembly supports pthreads, but not pthread_getaffinity_np. Get the number of logical + // threads from the browser or Node.js using JavaScript. + nThreads = MAIN_THREAD_EM_ASM_INT({ +@@ -674,6 +680,7 @@ namespace embree + return 1; + } + }); ++#endif + #else + cpu_set_t set; + if (pthread_getaffinity_np(pthread_self(), sizeof(set), &set) == 0) diff --git a/thirdparty/embree/patches/mingw-no-cpuidex.patch b/thirdparty/embree/patches/0004-mingw-no-cpuidex.patch similarity index 92% rename from thirdparty/embree/patches/mingw-no-cpuidex.patch rename to thirdparty/embree/patches/0004-mingw-no-cpuidex.patch index 5480334cebf..0124ae84674 100644 --- a/thirdparty/embree/patches/mingw-no-cpuidex.patch +++ b/thirdparty/embree/patches/0004-mingw-no-cpuidex.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/embree/common/sys/sysinfo.cpp b/thirdparty/embree/common/sys/sysinfo.cpp -index d01eab3c9d..4ecab05265 100644 +index d5b653fe5a..4583e49b1c 100644 --- a/thirdparty/embree/common/sys/sysinfo.cpp +++ b/thirdparty/embree/common/sys/sysinfo.cpp @@ -295,7 +295,7 @@ namespace embree diff --git a/thirdparty/embree/patches/mingw-llvm-arm64.diff b/thirdparty/embree/patches/0005-mingw-llvm-arm64.patch similarity index 69% rename from thirdparty/embree/patches/mingw-llvm-arm64.diff rename to thirdparty/embree/patches/0005-mingw-llvm-arm64.patch index c2ad4fb1dc0..da3012ef759 100644 --- a/thirdparty/embree/patches/mingw-llvm-arm64.diff +++ b/thirdparty/embree/patches/0005-mingw-llvm-arm64.patch @@ -1,46 +1,40 @@ diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h -index b18d41e783..c54d0b7951 100644 +index b18d41e783..5a75ccff20 100644 --- a/thirdparty/embree/common/simd/arm/sse2neon.h +++ b/thirdparty/embree/common/simd/arm/sse2neon.h -@@ -102,7 +102,9 @@ +@@ -102,7 +102,7 @@ #include #include -#if defined(_WIN32) -+// -- GODOT start -- +#if defined(_WIN32) && !defined(__MINGW32__) -+// -- GODOT end -- /* Definitions for _mm_{malloc,free} are provided by * from both MinGW-w64 and MSVC. */ -@@ -2080,8 +2082,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align) +@@ -1888,7 +1888,11 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) + #if !defined(SSE2NEON_ALLOC_DEFINED) + FORCE_INLINE void _mm_free(void *addr) + { ++#if defined(_WIN32) ++ _aligned_free(addr); ++#else + free(addr); ++#endif + } + #endif + +@@ -2080,8 +2084,14 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align) return malloc(size); if (align == 2 || (sizeof(void *) == 8 && align == 4)) align = sizeof(void *); -- if (!posix_memalign(&ptr, align, size)) -+// -- GODOT start -- +#if defined(_WIN32) + ptr = _aligned_malloc(size, align); + if (ptr) - return ptr; -+#else -+ if (!posix_memalign(&ptr, align, size)) + return ptr; -+#endif -+// -- GODOT end -- - return NULL; - } - #endif -@@ -1890,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) - #if !defined(SSE2NEON_ALLOC_DEFINED) - FORCE_INLINE void _mm_free(void *addr) - { -+// -- GODOT start -- -+#if defined(_WIN32) -+ _aligned_free(addr); +#else - free(addr); + if (!posix_memalign(&ptr, align, size)) + return ptr; +#endif -+// -- GODOT end -- + return NULL; } #endif diff --git a/thirdparty/embree/patches/include-order-dllexport-fix.patch b/thirdparty/embree/patches/0006-include-order-dllexport.patch similarity index 100% rename from thirdparty/embree/patches/include-order-dllexport-fix.patch rename to thirdparty/embree/patches/0006-include-order-dllexport.patch diff --git a/thirdparty/embree/patches/emscripten-nthreads.patch b/thirdparty/embree/patches/emscripten-nthreads.patch deleted file mode 100644 index e42f203475f..00000000000 --- a/thirdparty/embree/patches/emscripten-nthreads.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff --git a/thirdparty/embree/common/sys/sysinfo.cpp b/thirdparty/embree/common/sys/sysinfo.cpp -index c98f61fa53..7f7a009a1e 100644 ---- a/thirdparty/embree/common/sys/sysinfo.cpp -+++ b/thirdparty/embree/common/sys/sysinfo.cpp -@@ -640,6 +640,12 @@ namespace embree - - #if defined(__EMSCRIPTEN__) - #include -+ -+// -- GODOT start -- -+extern "C" { -+extern int godot_js_os_hw_concurrency_get(); -+} -+// -- GODOT end -- - #endif - - namespace embree -@@ -653,21 +659,9 @@ namespace embree - nThreads = sysconf(_SC_NPROCESSORS_ONLN); // does not work in Linux LXC container - assert(nThreads); - #elif defined(__EMSCRIPTEN__) -- // WebAssembly supports pthreads, but not pthread_getaffinity_np. Get the number of logical -- // threads from the browser or Node.js using JavaScript. -- nThreads = MAIN_THREAD_EM_ASM_INT({ -- const isBrowser = typeof window !== 'undefined'; -- const isNode = typeof process !== 'undefined' && process.versions != null && -- process.versions.node != null; -- if (isBrowser) { -- // Return 1 if the browser does not expose hardwareConcurrency. -- return window.navigator.hardwareConcurrency || 1; -- } else if (isNode) { -- return require('os').cpus().length; -- } else { -- return 1; -- } -- }); -+ // -- GODOT start -- -+ nThreads = godot_js_os_hw_concurrency_get(); -+ // -- GODOT end -- - #else - cpu_set_t set; - if (pthread_getaffinity_np(pthread_self(), sizeof(set), &set) == 0) diff --git a/thirdparty/enet/enet/enet.h b/thirdparty/enet/enet/enet.h index ed0dd652478..ccd8382c238 100644 --- a/thirdparty/enet/enet/enet.h +++ b/thirdparty/enet/enet/enet.h @@ -13,7 +13,6 @@ extern "C" #include #include -// -- Godot start -- #if 0 #ifdef _WIN32 #include "enet/win32.h" @@ -21,8 +20,7 @@ extern "C" #include "enet/unix.h" #endif #endif -#include "enet/godot.h" -// -- Godot end -- +#include "enet/enet_godot.h" #include "enet/types.h" #include "enet/protocol.h" @@ -93,7 +91,6 @@ typedef enum _ENetSocketShutdown * but not for enet_host_create. Once a server responds to a broadcast, the * address is updated from ENET_HOST_BROADCAST to the server's actual IP address. */ -// -- Godot start -- #if 0 typedef struct _ENetAddress { @@ -101,7 +98,6 @@ typedef struct _ENetAddress enet_uint16 port; } ENetAddress; #endif -// -- Godot end -- /** * Packet flag bit constants. @@ -618,9 +614,7 @@ ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, extern size_t enet_protocol_command_size (enet_uint8); -// -- Godot start -- -#include "enet/godot_ext.h" -// -- Godot end -- +#include "enet/enet_godot_ext.h" #ifdef __cplusplus } diff --git a/thirdparty/enet/enet/godot.h b/thirdparty/enet/enet/enet_godot.h similarity index 97% rename from thirdparty/enet/enet/godot.h rename to thirdparty/enet/enet/enet_godot.h index 1c60fdbb1fd..faeb5f262be 100644 --- a/thirdparty/enet/enet/godot.h +++ b/thirdparty/enet/enet/enet_godot.h @@ -1,5 +1,5 @@ /**************************************************************************/ -/* godot.h */ +/* enet_godot.h */ /**************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -29,7 +29,7 @@ /**************************************************************************/ /** - @file godot.h + @file enet_godot.h @brief ENet Godot header */ diff --git a/thirdparty/enet/enet/enet_godot_ext.h b/thirdparty/enet/enet/enet_godot_ext.h new file mode 100644 index 00000000000..ba81c78b28a --- /dev/null +++ b/thirdparty/enet/enet/enet_godot_ext.h @@ -0,0 +1,53 @@ +/**************************************************************************/ +/* enet_godot_ext.h */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* 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. */ +/**************************************************************************/ + +/** + @ *file enet_godot_ext.h + @brief ENet Godot extensions header + */ + +#ifndef __ENET_GODOT_EXT_H__ +#define __ENET_GODOT_EXT_H__ + +/** Sets the host field in the address parameter from ip struct. + @param address destination to store resolved address + @param ip the ip struct to read from + @param size the size of the ip struct. + @retval 0 on success + @retval != 0 on failure + @returns the address of the given ip in address on success. +*/ +ENET_API void enet_address_set_ip(ENetAddress * address, const uint8_t * ip, size_t size); + +ENET_API int enet_host_dtls_server_setup (ENetHost *, void *); +ENET_API int enet_host_dtls_client_setup (ENetHost *, const char *, void *); +ENET_API void enet_host_refuse_new_connections (ENetHost *, int); + +#endif // __ENET_GODOT_EXT_H__ diff --git a/thirdparty/enet/enet/godot_ext.h b/thirdparty/enet/enet/godot_ext.h deleted file mode 100644 index 06a621b790e..00000000000 --- a/thirdparty/enet/enet/godot_ext.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __ENET_GODOT_EXT_H__ -#define __ENET_GODOT_EXT_H__ - -/** Sets the host field in the address parameter from ip struct. - @param address destination to store resolved address - @param ip the ip struct to read from - @param size the size of the ip struct. - @retval 0 on success - @retval != 0 on failure - @returns the address of the given ip in address on success. -*/ -ENET_API void enet_address_set_ip(ENetAddress * address, const uint8_t * ip, size_t size); - -ENET_API int enet_host_dtls_server_setup (ENetHost *, void *); -ENET_API int enet_host_dtls_client_setup (ENetHost *, const char *, void *); -ENET_API void enet_host_refuse_new_connections (ENetHost *, int); - -#endif // __ENET_GODOT_EXT_H__ diff --git a/thirdparty/enet/godot.cpp b/thirdparty/enet/enet_godot.cpp similarity index 99% rename from thirdparty/enet/godot.cpp rename to thirdparty/enet/enet_godot.cpp index 9e766e52c3e..6465779528a 100644 --- a/thirdparty/enet/godot.cpp +++ b/thirdparty/enet/enet_godot.cpp @@ -1,5 +1,5 @@ /**************************************************************************/ -/* godot.cpp */ +/* enet_godot.cpp */ /**************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -29,7 +29,7 @@ /**************************************************************************/ /** - @file godot.cpp + @file enet_godot.cpp @brief ENet Godot specific functions */ diff --git a/thirdparty/enet/patches/godot_socket.patch b/thirdparty/enet/patches/0001-godot-socket.patch similarity index 88% rename from thirdparty/enet/patches/godot_socket.patch rename to thirdparty/enet/patches/0001-godot-socket.patch index d0fb97fb925..314ee4e6547 100644 --- a/thirdparty/enet/patches/godot_socket.patch +++ b/thirdparty/enet/patches/0001-godot-socket.patch @@ -1,15 +1,14 @@ diff --git a/thirdparty/enet/enet/enet.h b/thirdparty/enet/enet/enet.h -index 4a207041b3..5232f8a869 100644 +index 3001018763..ccd8382c23 100644 --- a/thirdparty/enet/enet/enet.h +++ b/thirdparty/enet/enet/enet.h -@@ -10,13 +10,19 @@ extern "C" +@@ -10,13 +10,17 @@ extern "C" { #endif +#include #include -+// -- Godot start -- +#if 0 #ifdef _WIN32 #include "enet/win32.h" @@ -17,16 +16,14 @@ index 4a207041b3..5232f8a869 100644 #include "enet/unix.h" #endif +#endif -+#include "enet/godot.h" -+// -- Godot end -- ++#include "enet/enet_godot.h" #include "enet/types.h" #include "enet/protocol.h" -@@ -87,11 +93,15 @@ typedef enum _ENetSocketShutdown +@@ -87,11 +91,13 @@ typedef enum _ENetSocketShutdown * but not for enet_host_create. Once a server responds to a broadcast, the * address is updated from ENET_HOST_BROADCAST to the server's actual IP address. */ -+// -- Godot start -- +#if 0 typedef struct _ENetAddress { @@ -34,17 +31,14 @@ index 4a207041b3..5232f8a869 100644 enet_uint16 port; } ENetAddress; +#endif -+// -- Godot end -- /** * Packet flag bit constants. -@@ -608,6 +618,10 @@ ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, +@@ -608,6 +614,8 @@ ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, extern size_t enet_protocol_command_size (enet_uint8); -+// -- Godot start -- -+#include "enet/godot_ext.h" -+// -- Godot end -- ++#include "enet/enet_godot_ext.h" + #ifdef __cplusplus } diff --git a/thirdparty/etcpak/patches/bc7e_remove.patch b/thirdparty/etcpak/patches/0001-remove-bc7enc.patch similarity index 100% rename from thirdparty/etcpak/patches/bc7e_remove.patch rename to thirdparty/etcpak/patches/0001-remove-bc7enc.patch diff --git a/thirdparty/glad/patches/patch_enable_both_gl_and_gles.diff b/thirdparty/glad/patches/0001-enable-both-gl-and-gles.patch similarity index 96% rename from thirdparty/glad/patches/patch_enable_both_gl_and_gles.diff rename to thirdparty/glad/patches/0001-enable-both-gl-and-gles.patch index a98efe51d8e..b8274020ce0 100644 --- a/thirdparty/glad/patches/patch_enable_both_gl_and_gles.diff +++ b/thirdparty/glad/patches/0001-enable-both-gl-and-gles.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/glad/gl.c b/thirdparty/glad/gl.c -index a0b59dbbfb..9f10f6544a 100644 +index e8cc5ff1d9..ee0cc188fc 100644 --- a/thirdparty/glad/gl.c +++ b/thirdparty/glad/gl.c @@ -2475,7 +2475,7 @@ static GLADapiproc glad_gl_get_proc(void *vuserptr, const char *name) { @@ -49,7 +49,7 @@ index a0b59dbbfb..9f10f6544a 100644 } diff --git a/thirdparty/glad/glad/gl.h b/thirdparty/glad/glad/gl.h -index 905c16aeed..f3cb7d8cb5 100644 +index 7f77d6a13f..307ea4dbb8 100644 --- a/thirdparty/glad/glad/gl.h +++ b/thirdparty/glad/glad/gl.h @@ -67,6 +67,7 @@ diff --git a/thirdparty/glslang/patches/disable-absolute-paths-for-apple-compat.patch b/thirdparty/glslang/patches/0001-apple-disable-absolute-paths.patch similarity index 96% rename from thirdparty/glslang/patches/disable-absolute-paths-for-apple-compat.patch rename to thirdparty/glslang/patches/0001-apple-disable-absolute-paths.patch index 135020737ea..3f4fa9fbe42 100644 --- a/thirdparty/glslang/patches/disable-absolute-paths-for-apple-compat.patch +++ b/thirdparty/glslang/patches/0001-apple-disable-absolute-paths.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/glslang/glslang/Include/InfoSink.h b/thirdparty/glslang/glslang/Include/InfoSink.h -index 23f495dc..137ede85 100644 +index 23f495dcb7..137ede8510 100644 --- a/thirdparty/glslang/glslang/Include/InfoSink.h +++ b/thirdparty/glslang/glslang/Include/InfoSink.h @@ -36,7 +36,7 @@ diff --git a/thirdparty/glslang/patches/fix-build-gcc15.patch b/thirdparty/glslang/patches/0002-gcc15-include-fix.patch similarity index 100% rename from thirdparty/glslang/patches/fix-build-gcc15.patch rename to thirdparty/glslang/patches/0002-gcc15-include-fix.patch diff --git a/thirdparty/jpeg-compressor/patches/clang-fortify-fix.patch b/thirdparty/jpeg-compressor/patches/0001-clang-fortify-fix.patch similarity index 100% rename from thirdparty/jpeg-compressor/patches/clang-fortify-fix.patch rename to thirdparty/jpeg-compressor/patches/0001-clang-fortify-fix.patch diff --git a/thirdparty/libbacktrace/patches/patch_big_files.diff b/thirdparty/libbacktrace/patches/0001-big-files-support.patch similarity index 71% rename from thirdparty/libbacktrace/patches/patch_big_files.diff rename to thirdparty/libbacktrace/patches/0001-big-files-support.patch index 6c3185c8d16..8258b781759 100644 --- a/thirdparty/libbacktrace/patches/patch_big_files.diff +++ b/thirdparty/libbacktrace/patches/0001-big-files-support.patch @@ -1,8 +1,8 @@ diff --git a/thirdparty/libbacktrace/read.c b/thirdparty/libbacktrace/read.c -index 1811c8d2e0..fda8e222d4 100644 +index 7af66602fd..a7e937667c 100644 --- a/thirdparty/libbacktrace/read.c +++ b/thirdparty/libbacktrace/read.c -@@ -52,14 +52,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, +@@ -52,14 +52,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, { uint64_t got; ssize_t r; @@ -14,34 +14,27 @@ index 1811c8d2e0..fda8e222d4 100644 - } - - if (lseek (descriptor, offset, SEEK_SET) < 0) -+/* GODOT start */ + if (_lseeki64 (descriptor, offset, SEEK_SET) < 0) -+/* GODOT end */ { error_callback (data, "lseek", errno); return 0; -@@ -74,7 +69,13 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, +@@ -74,7 +67,10 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, got = 0; while (got < size) { - r = read (descriptor, view->base, size - got); -+/* GODOT start */ + uint64_t sz = size - got; -+ if (sz > INT_MAX) { ++ if (sz > INT_MAX) + sz = INT_MAX; -+ } + r = _read (descriptor, view->base, sz); -+/* GODOT end */ if (r < 0) { error_callback (data, "read", errno); -@@ -84,6 +85,9 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, +@@ -84,6 +80,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, if (r == 0) break; got += (uint64_t) r; -+/* GODOT start */ + view->base += r; -+/* GODOT end */ } if (got < size) diff --git a/thirdparty/libbacktrace/read.c b/thirdparty/libbacktrace/read.c index 9f6997c79e0..a7e937667cc 100644 --- a/thirdparty/libbacktrace/read.c +++ b/thirdparty/libbacktrace/read.c @@ -52,9 +52,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, { uint64_t got; ssize_t r; -/* GODOT start */ if (_lseeki64 (descriptor, offset, SEEK_SET) < 0) -/* GODOT end */ { error_callback (data, "lseek", errno); return 0; @@ -69,13 +67,10 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, got = 0; while (got < size) { -/* GODOT start */ uint64_t sz = size - got; - if (sz > INT_MAX) { + if (sz > INT_MAX) sz = INT_MAX; - } r = _read (descriptor, view->base, sz); -/* GODOT end */ if (r < 0) { error_callback (data, "read", errno); @@ -85,9 +80,7 @@ backtrace_get_view (struct backtrace_state *state, int descriptor, if (r == 0) break; got += (uint64_t) r; -/* GODOT start */ view->base += r; -/* GODOT end */ } if (got < size) diff --git a/thirdparty/libktx/patches/0001-external-basisu.patch b/thirdparty/libktx/patches/0001-external-basisu.patch new file mode 100644 index 00000000000..a4b6de06026 --- /dev/null +++ b/thirdparty/libktx/patches/0001-external-basisu.patch @@ -0,0 +1,30 @@ +diff --git a/thirdparty/libktx/lib/basis_transcode.cpp b/thirdparty/libktx/lib/basis_transcode.cpp +index ca68545e4a..d7ecb7a0fd 100644 +--- a/thirdparty/libktx/lib/basis_transcode.cpp ++++ b/thirdparty/libktx/lib/basis_transcode.cpp +@@ -29,9 +29,9 @@ + #include "vkformat_enum.h" + #include "vk_format.h" + #include "basis_sgd.h" +-#include "basisu/transcoder/basisu_file_headers.h" +-#include "basisu/transcoder/basisu_transcoder.h" +-#include "basisu/transcoder/basisu_transcoder_internal.h" ++#include "transcoder/basisu_file_headers.h" ++#include "transcoder/basisu_transcoder.h" ++#include "transcoder/basisu_transcoder_internal.h" + + #undef DECLARE_PRIVATE + #undef DECLARE_PROTECTED +diff --git a/thirdparty/libktx/lib/miniz_wrapper.cpp b/thirdparty/libktx/lib/miniz_wrapper.cpp +index 07920c4809..cbd7da540a 100644 +--- a/thirdparty/libktx/lib/miniz_wrapper.cpp ++++ b/thirdparty/libktx/lib/miniz_wrapper.cpp +@@ -30,7 +30,7 @@ + #pragma GCC diagnostic ignored "-Wextra" + #pragma GCC diagnostic ignored "-Wmisleading-indentation" + #endif +-#include "basisu/encoder/basisu_miniz.h" ++#include "encoder/basisu_miniz.h" + #ifdef __GNUC__ + #pragma GCC diagnostic pop + #endif diff --git a/thirdparty/libktx/patches/godot.patch b/thirdparty/libktx/patches/0002-disable-astc-block-ext.patch similarity index 56% rename from thirdparty/libktx/patches/godot.patch rename to thirdparty/libktx/patches/0002-disable-astc-block-ext.patch index 13468813fb5..73299f485b3 100644 --- a/thirdparty/libktx/patches/godot.patch +++ b/thirdparty/libktx/patches/0002-disable-astc-block-ext.patch @@ -1,20 +1,3 @@ -diff --git a/thirdparty/libktx/lib/basis_transcode.cpp b/thirdparty/libktx/lib/basis_transcode.cpp -index ca68545e4a..d7ecb7a0fd 100644 ---- a/thirdparty/libktx/lib/basis_transcode.cpp -+++ b/thirdparty/libktx/lib/basis_transcode.cpp -@@ -29,9 +29,9 @@ - #include "vkformat_enum.h" - #include "vk_format.h" - #include "basis_sgd.h" --#include "basisu/transcoder/basisu_file_headers.h" --#include "basisu/transcoder/basisu_transcoder.h" --#include "basisu/transcoder/basisu_transcoder_internal.h" -+#include "transcoder/basisu_file_headers.h" -+#include "transcoder/basisu_transcoder.h" -+#include "transcoder/basisu_transcoder_internal.h" - - #undef DECLARE_PRIVATE - #undef DECLARE_PROTECTED diff --git a/thirdparty/libktx/lib/dfdutils/vk2dfd.inl b/thirdparty/libktx/lib/dfdutils/vk2dfd.inl index 5104c8fcb4..3398441e8c 100644 --- a/thirdparty/libktx/lib/dfdutils/vk2dfd.inl @@ -35,16 +18,3 @@ index 5104c8fcb4..3398441e8c 100644 case VK_FORMAT_R16G16_S10_5_NV: return createDFDUnpacked(0, 2, 2, 0, s_S10_5); case VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR: { int channels[] = {0,1,2,3}; int bits[] = {5,5,5,1}; -diff --git a/thirdparty/libktx/lib/miniz_wrapper.cpp b/thirdparty/libktx/lib/miniz_wrapper.cpp -index 07920c4809..cbd7da540a 100644 ---- a/thirdparty/libktx/lib/miniz_wrapper.cpp -+++ b/thirdparty/libktx/lib/miniz_wrapper.cpp -@@ -30,7 +30,7 @@ - #pragma GCC diagnostic ignored "-Wextra" - #pragma GCC diagnostic ignored "-Wmisleading-indentation" - #endif --#include "basisu/encoder/basisu_miniz.h" -+#include "encoder/basisu_miniz.h" - #ifdef __GNUC__ - #pragma GCC diagnostic pop - #endif diff --git a/thirdparty/libwebp/patches/godot-node-debug-fix.patch b/thirdparty/libwebp/patches/0001-msvc-node-debug-rename.patch similarity index 67% rename from thirdparty/libwebp/patches/godot-node-debug-fix.patch rename to thirdparty/libwebp/patches/0001-msvc-node-debug-rename.patch index 848664dccf9..e0301aa9b9e 100644 --- a/thirdparty/libwebp/patches/godot-node-debug-fix.patch +++ b/thirdparty/libwebp/patches/0001-msvc-node-debug-rename.patch @@ -1,15 +1,13 @@ diff --git a/thirdparty/libwebp/src/enc/quant_enc.c b/thirdparty/libwebp/src/enc/quant_enc.c -index 6d8202d277..8f9a3c8668 100644 ---- a/src/enc/quant_enc.c -+++ b/src/enc/quant_enc.c -@@ -556,6 +556,11 @@ static void AddScore(VP8ModeScore* WEBP_RESTRICT const dst, +index 6d8202d277..302e8047f2 100644 +--- a/thirdparty/libwebp/src/enc/quant_enc.c ++++ b/thirdparty/libwebp/src/enc/quant_enc.c +@@ -556,6 +556,9 @@ static void AddScore(VP8ModeScore* WEBP_RESTRICT const dst, //------------------------------------------------------------------------------ // Performs trellis-optimized quantization. -+// -- GODOT start -- +// Prevents Visual Studio debugger from using this Node struct in place of the Godot Node class. +#define Node Node_libwebp_quant -+// -- GODOT end -- + // Trellis node typedef struct { diff --git a/thirdparty/libwebp/patches/godot-msvc-arm64-fpstrict-fix.patch b/thirdparty/libwebp/patches/0002-msvc-arm64-fpstrict.patch similarity index 80% rename from thirdparty/libwebp/patches/godot-msvc-arm64-fpstrict-fix.patch rename to thirdparty/libwebp/patches/0002-msvc-arm64-fpstrict.patch index b0be515ea82..f7bd6a9a5e9 100644 --- a/thirdparty/libwebp/patches/godot-msvc-arm64-fpstrict-fix.patch +++ b/thirdparty/libwebp/patches/0002-msvc-arm64-fpstrict.patch @@ -1,18 +1,16 @@ diff --git a/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c b/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c -index 09028428ac..3184e2b80f 100644 +index 09028428ac..6f1a88bf1a 100644 --- a/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c +++ b/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c -@@ -26,7 +26,13 @@ static uint32_t kGammaToLinearTabS[GAMMA_TO_LINEAR_TAB_SIZE + 2]; +@@ -26,7 +26,11 @@ static uint32_t kGammaToLinearTabS[GAMMA_TO_LINEAR_TAB_SIZE + 2]; #define LINEAR_TO_GAMMA_TAB_SIZE (1 << LINEAR_TO_GAMMA_TAB_BITS) static uint32_t kLinearToGammaTabS[LINEAR_TO_GAMMA_TAB_SIZE + 2]; -+// -- GODOT start -- +#if defined(_MSC_VER) +static const double kGammaF = 2.222222222222222; +#else static const double kGammaF = 1. / 0.45; +#endif -+// -- GODOT end -- #define GAMMA_TO_LINEAR_BITS 16 static volatile int kGammaTablesSOk = 0; diff --git a/thirdparty/libwebp/patches/godot-clang-cl-fix.patch b/thirdparty/libwebp/patches/0003-clang-cl-sse2-sse41.patch similarity index 100% rename from thirdparty/libwebp/patches/godot-clang-cl-fix.patch rename to thirdparty/libwebp/patches/0003-clang-cl-sse2-sse41.patch diff --git a/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c b/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c index 73b75e98b4a..6f1a88bf1af 100644 --- a/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c +++ b/thirdparty/libwebp/sharpyuv/sharpyuv_gamma.c @@ -26,13 +26,11 @@ static uint32_t kGammaToLinearTabS[GAMMA_TO_LINEAR_TAB_SIZE + 2]; #define LINEAR_TO_GAMMA_TAB_SIZE (1 << LINEAR_TO_GAMMA_TAB_BITS) static uint32_t kLinearToGammaTabS[LINEAR_TO_GAMMA_TAB_SIZE + 2]; -// -- GODOT start -- #if defined(_MSC_VER) static const double kGammaF = 2.222222222222222; #else static const double kGammaF = 1. / 0.45; #endif -// -- GODOT end -- #define GAMMA_TO_LINEAR_BITS 16 static volatile int kGammaTablesSOk = 0; diff --git a/thirdparty/libwebp/src/enc/quant_enc.c b/thirdparty/libwebp/src/enc/quant_enc.c index 8f9a3c86682..302e8047f25 100644 --- a/thirdparty/libwebp/src/enc/quant_enc.c +++ b/thirdparty/libwebp/src/enc/quant_enc.c @@ -556,10 +556,8 @@ static void AddScore(VP8ModeScore* WEBP_RESTRICT const dst, //------------------------------------------------------------------------------ // Performs trellis-optimized quantization. -// -- GODOT start -- // Prevents Visual Studio debugger from using this Node struct in place of the Godot Node class. #define Node Node_libwebp_quant -// -- GODOT end -- // Trellis node typedef struct { diff --git a/thirdparty/linuxbsd_headers/README.md b/thirdparty/linuxbsd_headers/README.md index 4f36f1f0cbb..3ea30b81b25 100644 --- a/thirdparty/linuxbsd_headers/README.md +++ b/thirdparty/linuxbsd_headers/README.md @@ -11,7 +11,10 @@ readability. - Version: 1.1.3-5 - License: LGPL-2.1+ -Patches in the `patches` directory should be re-applied after updates. +Patches: + +- `0001-musl-standard-poll.patch` (GH-71934) +- `0002-freebsd-sys-endian.patch` (GH-100047) ## dbus diff --git a/thirdparty/linuxbsd_headers/alsa/patches/0001-musl-standard-poll.patch b/thirdparty/linuxbsd_headers/alsa/patches/0001-musl-standard-poll.patch new file mode 100644 index 00000000000..9c5b6bf49fb --- /dev/null +++ b/thirdparty/linuxbsd_headers/alsa/patches/0001-musl-standard-poll.patch @@ -0,0 +1,13 @@ +diff --git a/thirdparty/linuxbsd_headers/alsa/asoundlib.h b/thirdparty/linuxbsd_headers/alsa/asoundlib.h +index 3c2766e325..a546194382 100644 +--- a/thirdparty/linuxbsd_headers/alsa/asoundlib.h ++++ b/thirdparty/linuxbsd_headers/alsa/asoundlib.h +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include diff --git a/thirdparty/linuxbsd_headers/alsa/patches/freebsd_endian.diff b/thirdparty/linuxbsd_headers/alsa/patches/0002-freebsd-sys-endian.patch similarity index 100% rename from thirdparty/linuxbsd_headers/alsa/patches/freebsd_endian.diff rename to thirdparty/linuxbsd_headers/alsa/patches/0002-freebsd-sys-endian.patch diff --git a/thirdparty/linuxbsd_headers/alsa/patches/use-standard-poll-h.diff b/thirdparty/linuxbsd_headers/alsa/patches/use-standard-poll-h.diff deleted file mode 100644 index 8d536df5791..00000000000 --- a/thirdparty/linuxbsd_headers/alsa/patches/use-standard-poll-h.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- a/asoundlib.h -+++ b/asoundlib.h -@@ -35,7 +35,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include diff --git a/thirdparty/mbedtls/patches/msvc-redeclaration-bug.diff b/thirdparty/mbedtls/patches/0001-msvc-2019-psa-redeclaration.patch similarity index 100% rename from thirdparty/mbedtls/patches/msvc-redeclaration-bug.diff rename to thirdparty/mbedtls/patches/0001-msvc-2019-psa-redeclaration.patch diff --git a/thirdparty/meshoptimizer/patches/distance-only-metric.patch b/thirdparty/meshoptimizer/patches/0001-simplifier-distance-only-error.patch similarity index 100% rename from thirdparty/meshoptimizer/patches/distance-only-metric.patch rename to thirdparty/meshoptimizer/patches/0001-simplifier-distance-only-error.patch diff --git a/thirdparty/mingw-std-threads/godot.patch b/thirdparty/mingw-std-threads/patches/0001-disable-exceptions.patch similarity index 65% rename from thirdparty/mingw-std-threads/godot.patch rename to thirdparty/mingw-std-threads/patches/0001-disable-exceptions.patch index 9d772a2e531..012a9e7b17f 100644 --- a/thirdparty/mingw-std-threads/godot.patch +++ b/thirdparty/mingw-std-threads/patches/0001-disable-exceptions.patch @@ -1,16 +1,7 @@ diff --git a/thirdparty/mingw-std-threads/mingw.condition_variable.h b/thirdparty/mingw-std-threads/mingw.condition_variable.h -index 50c5ebd6df..d099fad2ec 100644 +index 05086ac429..d099fad2ec 100644 --- a/thirdparty/mingw-std-threads/mingw.condition_variable.h +++ b/thirdparty/mingw-std-threads/mingw.condition_variable.h -@@ -58,7 +58,7 @@ - - namespace mingw_stdthread - { --#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) -+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) - enum class cv_status { no_timeout, timeout }; - #else - using std::cv_status; @@ -87,12 +87,12 @@ public: : mSemaphore(CreateSemaphoreA(NULL, 0, 0xFFFF, NULL)) { @@ -35,17 +26,8 @@ index 50c5ebd6df..d099fad2ec 100644 } } public: -@@ -547,7 +547,7 @@ namespace std - // was none. Direct specification (std::), however, would be unaffected. - // Take the safe option, and include only in the presence of MinGW's win32 - // implementation. --#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) -+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) - using mingw_stdthread::cv_status; - using mingw_stdthread::condition_variable; - using mingw_stdthread::condition_variable_any; diff --git a/thirdparty/mingw-std-threads/mingw.mutex.h b/thirdparty/mingw-std-threads/mingw.mutex.h -index 03efa13f8b..1e881e6c7d 100644 +index 3bf9bd02a7..1e881e6c7d 100644 --- a/thirdparty/mingw-std-threads/mingw.mutex.h +++ b/thirdparty/mingw-std-threads/mingw.mutex.h @@ -132,7 +132,7 @@ struct _OwnerThread @@ -73,17 +55,8 @@ index 03efa13f8b..1e881e6c7d 100644 } bool try_lock() { -@@ -480,7 +480,7 @@ namespace std - // was none. Direct specification (std::), however, would be unaffected. - // Take the safe option, and include only in the presence of MinGW's win32 - // implementation. --#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) -+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) - using mingw_stdthread::recursive_mutex; - using mingw_stdthread::mutex; - using mingw_stdthread::recursive_timed_mutex; diff --git a/thirdparty/mingw-std-threads/mingw.shared_mutex.h b/thirdparty/mingw-std-threads/mingw.shared_mutex.h -index ff1ac65135..ddc46bb826 100644 +index de89b57966..ddc46bb826 100644 --- a/thirdparty/mingw-std-threads/mingw.shared_mutex.h +++ b/thirdparty/mingw-std-threads/mingw.shared_mutex.h @@ -134,7 +134,7 @@ public: @@ -125,21 +98,8 @@ index ff1ac65135..ddc46bb826 100644 mMutex->unlock_shared(); mOwns = false; } -@@ -484,10 +484,10 @@ namespace std - // was none. Direct specification (std::), however, would be unaffected. - // Take the safe option, and include only in the presence of MinGW's win32 - // implementation. --#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)) -+#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)) - using mingw_stdthread::shared_mutex; - #endif --#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)) -+#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)) - using mingw_stdthread::shared_timed_mutex; - using mingw_stdthread::shared_lock; - #elif !defined(MINGW_STDTHREAD_REDUNDANCY_WARNING) // Skip repetition diff --git a/thirdparty/mingw-std-threads/mingw.thread.h b/thirdparty/mingw-std-threads/mingw.thread.h -index bcdd1a36a8..60d2200db2 100644 +index 011c2d8c56..60d2200db2 100644 --- a/thirdparty/mingw-std-threads/mingw.thread.h +++ b/thirdparty/mingw-std-threads/mingw.thread.h @@ -193,10 +193,9 @@ public: @@ -178,12 +138,3 @@ index bcdd1a36a8..60d2200db2 100644 } if (mHandle != kInvalidHandle) { -@@ -326,7 +325,7 @@ namespace std - // was none. Direct specification (std::), however, would be unaffected. - // Take the safe option, and include only in the presence of MinGW's win32 - // implementation. --#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) -+#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) - using mingw_stdthread::thread; - // Remove ambiguity immediately, to avoid problems arising from the above. - //using std::thread; diff --git a/thirdparty/mingw-std-threads/patches/0002-clang-std-replacements-leak.patch b/thirdparty/mingw-std-threads/patches/0002-clang-std-replacements-leak.patch new file mode 100644 index 00000000000..ab67299c3a8 --- /dev/null +++ b/thirdparty/mingw-std-threads/patches/0002-clang-std-replacements-leak.patch @@ -0,0 +1,65 @@ +diff --git a/thirdparty/mingw-std-threads/mingw.condition_variable.h b/thirdparty/mingw-std-threads/mingw.condition_variable.h +index f9e248c154..d099fad2ec 100644 +--- a/thirdparty/mingw-std-threads/mingw.condition_variable.h ++++ b/thirdparty/mingw-std-threads/mingw.condition_variable.h +@@ -58,7 +58,7 @@ + + namespace mingw_stdthread + { +-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) ++#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) + enum class cv_status { no_timeout, timeout }; + #else + using std::cv_status; +@@ -547,7 +547,7 @@ namespace std + // was none. Direct specification (std::), however, would be unaffected. + // Take the safe option, and include only in the presence of MinGW's win32 + // implementation. +-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) ++#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) + using mingw_stdthread::cv_status; + using mingw_stdthread::condition_variable; + using mingw_stdthread::condition_variable_any; +diff --git a/thirdparty/mingw-std-threads/mingw.mutex.h b/thirdparty/mingw-std-threads/mingw.mutex.h +index 73698d13cb..1e881e6c7d 100644 +--- a/thirdparty/mingw-std-threads/mingw.mutex.h ++++ b/thirdparty/mingw-std-threads/mingw.mutex.h +@@ -480,7 +480,7 @@ namespace std + // was none. Direct specification (std::), however, would be unaffected. + // Take the safe option, and include only in the presence of MinGW's win32 + // implementation. +-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) ++#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) + using mingw_stdthread::recursive_mutex; + using mingw_stdthread::mutex; + using mingw_stdthread::recursive_timed_mutex; +diff --git a/thirdparty/mingw-std-threads/mingw.shared_mutex.h b/thirdparty/mingw-std-threads/mingw.shared_mutex.h +index 5375b0fbd1..ddc46bb826 100644 +--- a/thirdparty/mingw-std-threads/mingw.shared_mutex.h ++++ b/thirdparty/mingw-std-threads/mingw.shared_mutex.h +@@ -484,10 +484,10 @@ namespace std + // was none. Direct specification (std::), however, would be unaffected. + // Take the safe option, and include only in the presence of MinGW's win32 + // implementation. +-#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)) ++#if (__cplusplus < 201703L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)) + using mingw_stdthread::shared_mutex; + #endif +-#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS)) ++#if (__cplusplus < 201402L) || (defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__)) + using mingw_stdthread::shared_timed_mutex; + using mingw_stdthread::shared_lock; + #elif !defined(MINGW_STDTHREAD_REDUNDANCY_WARNING) // Skip repetition +diff --git a/thirdparty/mingw-std-threads/mingw.thread.h b/thirdparty/mingw-std-threads/mingw.thread.h +index 4bcc63e1b1..60d2200db2 100644 +--- a/thirdparty/mingw-std-threads/mingw.thread.h ++++ b/thirdparty/mingw-std-threads/mingw.thread.h +@@ -325,7 +325,7 @@ namespace std + // was none. Direct specification (std::), however, would be unaffected. + // Take the safe option, and include only in the presence of MinGW's win32 + // implementation. +-#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) ++#if defined(__MINGW32__ ) && !defined(_GLIBCXX_HAS_GTHREADS) && !defined(__clang__) + using mingw_stdthread::thread; + // Remove ambiguity immediately, to avoid problems arising from the above. + //using std::thread; diff --git a/thirdparty/minimp3/minimp3.h b/thirdparty/minimp3/minimp3.h index 2a9975cc86b..49708b9846b 100644 --- a/thirdparty/minimp3/minimp3.h +++ b/thirdparty/minimp3/minimp3.h @@ -1566,7 +1566,6 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins) #else /* MINIMP3_FLOAT_OUTPUT */ -// -- GODOT start -- #if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM)) static f4 g_scale; g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 0); @@ -1576,7 +1575,6 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins) #else static const f4 g_scale = { 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f }; #endif -// -- GODOT end -- a = VMUL(a, g_scale); b = VMUL(b, g_scale); @@ -1825,17 +1823,15 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples) for(; i < aligned_count; i += 8) { -// -- GODOT start -- #if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM)) - static f4 g_scale; - g_scale = vsetq_lane_f32(32768.0f, g_scale, 0); - g_scale = vsetq_lane_f32(32768.0f, g_scale, 1); - g_scale = vsetq_lane_f32(32768.0f, g_scale, 2); - g_scale = vsetq_lane_f32(32768.0f, g_scale, 3); + static f4 g_scale; + g_scale = vsetq_lane_f32(32768.0f, g_scale, 0); + g_scale = vsetq_lane_f32(32768.0f, g_scale, 1); + g_scale = vsetq_lane_f32(32768.0f, g_scale, 2); + g_scale = vsetq_lane_f32(32768.0f, g_scale, 3); #else static const f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f }; #endif -// -- GODOT end -- f4 a = VMUL(VLD(&in[i ]), g_scale); f4 b = VMUL(VLD(&in[i+4]), g_scale); diff --git a/thirdparty/minimp3/patches/msvc-arm-fix.patch b/thirdparty/minimp3/patches/0001-msvc-arm.patch similarity index 69% rename from thirdparty/minimp3/patches/msvc-arm-fix.patch rename to thirdparty/minimp3/patches/0001-msvc-arm.patch index bca915acebf..8121dec9eb3 100644 --- a/thirdparty/minimp3/patches/msvc-arm-fix.patch +++ b/thirdparty/minimp3/patches/0001-msvc-arm.patch @@ -1,12 +1,11 @@ diff --git a/thirdparty/minimp3/minimp3.h b/thirdparty/minimp3/minimp3.h -index 3220ae1a85..2a9975cc86 100644 +index 3220ae1a85..49708b9846 100644 --- a/thirdparty/minimp3/minimp3.h +++ b/thirdparty/minimp3/minimp3.h -@@ -1566,7 +1566,18 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins) +@@ -1566,7 +1566,16 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins) #else /* MINIMP3_FLOAT_OUTPUT */ -+// -- GODOT start -- +#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM)) + static f4 g_scale; + g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 0); @@ -16,27 +15,24 @@ index 3220ae1a85..2a9975cc86 100644 +#else static const f4 g_scale = { 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f }; +#endif -+// -- GODOT end -- + a = VMUL(a, g_scale); b = VMUL(b, g_scale); #if HAVE_SSE -@@ -1813,7 +1824,19 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples) +@@ -1813,7 +1822,17 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples) int aligned_count = num_samples & ~7; for(; i < aligned_count; i += 8) { + -+// -- GODOT start -- +#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM)) -+ static f4 g_scale; -+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 0); -+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 1); -+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 2); -+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 3); ++ static f4 g_scale; ++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 0); ++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 1); ++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 2); ++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 3); +#else static const f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f }; +#endif -+// -- GODOT end -- + f4 a = VMUL(VLD(&in[i ]), g_scale); f4 b = VMUL(VLD(&in[i+4]), g_scale); diff --git a/thirdparty/minimp3/patches/msvc-warnings-fixes.patch b/thirdparty/minimp3/patches/0002-msvc-warnings.patch similarity index 100% rename from thirdparty/minimp3/patches/msvc-warnings-fixes.patch rename to thirdparty/minimp3/patches/0002-msvc-warnings.patch diff --git a/thirdparty/minizip/ioapi.c b/thirdparty/minizip/ioapi.c index 2e89f5f41af..2e393aca2dd 100644 --- a/thirdparty/minizip/ioapi.c +++ b/thirdparty/minizip/ioapi.c @@ -75,16 +75,12 @@ void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filef p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; - /* GODOT start */ p_filefunc64_32->zfile_func64.alloc_mem = p_filefunc32->alloc_mem; p_filefunc64_32->zfile_func64.free_mem = p_filefunc32->free_mem; - /* GODOT end */ } -/* GODOT start */ -/* -// GODOT end +#if 0 static voidpf ZCALLBACK fopen_file_func(voidpf opaque, const char* filename, int mode) { FILE* file = NULL; @@ -236,6 +232,5 @@ void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def) { pzlib_filefunc_def->zerror_file = ferror_file_func; pzlib_filefunc_def->opaque = NULL; } -// GODOT start -*/ -/* GODOT end */ + +#endif diff --git a/thirdparty/minizip/ioapi.h b/thirdparty/minizip/ioapi.h index 509b52da8af..556dd8ad181 100644 --- a/thirdparty/minizip/ioapi.h +++ b/thirdparty/minizip/ioapi.h @@ -155,10 +155,8 @@ typedef struct zlib_filefunc_def_s close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; - /* GODOT start */ alloc_func alloc_mem; free_func free_mem; - /* GODOT end */ } zlib_filefunc_def; typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (voidpf opaque, voidpf stream); @@ -175,10 +173,8 @@ typedef struct zlib_filefunc64_def_s close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; - /* GODOT start */ alloc_func alloc_mem; free_func free_mem; - /* GODOT end */ } zlib_filefunc64_def; void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def); diff --git a/thirdparty/minizip/patches/godot-seek.patch b/thirdparty/minizip/patches/0001-godot-seek.patch similarity index 80% rename from thirdparty/minizip/patches/godot-seek.patch rename to thirdparty/minizip/patches/0001-godot-seek.patch index 649de2fe2fb..ed6161eef27 100644 --- a/thirdparty/minizip/patches/godot-seek.patch +++ b/thirdparty/minizip/patches/0001-godot-seek.patch @@ -1,108 +1,97 @@ diff --git a/thirdparty/minizip/ioapi.c b/thirdparty/minizip/ioapi.c -index 782d32469a..2e89f5f41a 100644 +index 782d32469a..2e393aca2d 100644 --- a/thirdparty/minizip/ioapi.c +++ b/thirdparty/minizip/ioapi.c -@@ -75,8 +75,15 @@ void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filef +@@ -75,9 +75,12 @@ void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filef p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; -+ /* GODOT start */ + p_filefunc64_32->zfile_func64.alloc_mem = p_filefunc32->alloc_mem; + p_filefunc64_32->zfile_func64.free_mem = p_filefunc32->free_mem; -+ /* GODOT end */ } -+/* GODOT start */ -+/* -+// GODOT end ++#if 0 static voidpf ZCALLBACK fopen_file_func(voidpf opaque, const char* filename, int mode) { -@@ -229,3 +236,6 @@ void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def) { + FILE* file = NULL; +@@ -229,3 +232,5 @@ void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def) { pzlib_filefunc_def->zerror_file = ferror_file_func; pzlib_filefunc_def->opaque = NULL; } -+// GODOT start -+*/ -+/* GODOT end */ ++ ++#endif diff --git a/thirdparty/minizip/ioapi.h b/thirdparty/minizip/ioapi.h -index a2d2e6e60d..509b52da8a 100644 +index a2d2e6e60d..556dd8ad18 100644 --- a/thirdparty/minizip/ioapi.h +++ b/thirdparty/minizip/ioapi.h -@@ -155,6 +155,10 @@ typedef struct zlib_filefunc_def_s +@@ -155,6 +155,8 @@ typedef struct zlib_filefunc_def_s close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; -+ /* GODOT start */ + alloc_func alloc_mem; + free_func free_mem; -+ /* GODOT end */ } zlib_filefunc_def; typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (voidpf opaque, voidpf stream); -@@ -171,6 +175,10 @@ typedef struct zlib_filefunc64_def_s +@@ -171,6 +173,8 @@ typedef struct zlib_filefunc64_def_s close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; -+ /* GODOT start */ + alloc_func alloc_mem; + free_func free_mem; -+ /* GODOT end */ } zlib_filefunc64_def; void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def); diff --git a/thirdparty/minizip/unzip.c b/thirdparty/minizip/unzip.c -index ea05b7d62a..981ba3c0cb 100644 +index ea05b7d62a..7e8a6ac2d3 100644 --- a/thirdparty/minizip/unzip.c +++ b/thirdparty/minizip/unzip.c -@@ -152,6 +152,9 @@ typedef struct +@@ -152,6 +152,7 @@ typedef struct uLong compression_method; /* compression method (0==store) */ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ int raw; -+ /* GODOT start */ + int extra_size; -+ /* GODOT end */ } file_in_zip64_read_info_s; -@@ -513,9 +516,10 @@ local unzFile unzOpenInternal(const void *path, +@@ -513,9 +514,9 @@ local unzFile unzOpenInternal(const void *path, us.z_filefunc.zseek32_file = NULL; us.z_filefunc.ztell32_file = NULL; if (pzlib_filefunc64_32_def==NULL) - fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); - else - us.z_filefunc = *pzlib_filefunc64_32_def; -+ /* GODOT start */ ++ //fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); + return NULL; // standard i/o not supported + us.z_filefunc = *pzlib_filefunc64_32_def; -+ /* GODOT end */ us.is64bitOpenFunction = is64bitOpenFunction; -@@ -703,6 +707,18 @@ extern unzFile ZEXPORT unzOpen64(const void *path) { +@@ -703,6 +704,15 @@ extern unzFile ZEXPORT unzOpen64(const void *path) { return unzOpenInternal(path, NULL, 1); } -+/* GODOT start */ +extern void* unzGetOpaque(unzFile file) { -+ + unz64_s* s; + if (file==NULL) + return NULL; + s=(unz64_s*)file; + + return s->z_filefunc.zfile_func64.opaque; -+}; -+/* GODOT end */ ++} + /* Close a ZipFile opened with unzOpen. If there is files inside the .Zip opened with unzOpenCurrentFile (see later), -@@ -905,10 +921,23 @@ local int unz64local_GetCurrentFileInfoInternal(unzFile file, +@@ -905,10 +915,19 @@ local int unz64local_GetCurrentFileInfoInternal(unzFile file, if (lSeek!=0) { -+ /* GODOT start */ +- if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) +- lSeek=0; +- else +- err=UNZ_ERRNO; + if (lSeek<0) { + // WORKAROUND for backwards seeking + ZPOS64_T pos = ZTELL64(s->z_filefunc, s->filestream); @@ -111,47 +100,38 @@ index ea05b7d62a..981ba3c0cb 100644 + else + err=UNZ_ERRNO; + } else { -+ /* GODOT end */ - if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) - lSeek=0; - else - err=UNZ_ERRNO; -+ /* GODOT start */ ++ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) ++ lSeek=0; ++ else ++ err=UNZ_ERRNO; + } -+ /* GODOT end */ } while(acc < file_info.size_file_extra) -@@ -1446,8 +1475,10 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, +@@ -1446,8 +1465,8 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, } else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) { - pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; - pfile_in_zip_read_info->stream.zfree = (free_func)0; -+ /* GODOT start */ + pfile_in_zip_read_info->stream.zalloc = s->z_filefunc.zfile_func64.alloc_mem; + pfile_in_zip_read_info->stream.zfree = s->z_filefunc.zfile_func64.free_mem; -+ /* GODOT end */ pfile_in_zip_read_info->stream.opaque = (voidpf)0; pfile_in_zip_read_info->stream.next_in = 0; pfile_in_zip_read_info->stream.avail_in = 0; -@@ -1480,6 +1511,9 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, +@@ -1480,6 +1499,7 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, iSizeVar; pfile_in_zip_read_info->stream.avail_in = (uInt)0; -+ /* GODOT start */ + pfile_in_zip_read_info->extra_size = iSizeVar; -+ /* GODOT end */ s->pfile_in_zip_read = pfile_in_zip_read_info; s->encrypted = 0; -@@ -1510,6 +1544,85 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, +@@ -1510,6 +1530,82 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, return UNZ_OK; } -+/* GODOT start */ +extern int ZEXPORT unzSeekCurrentFile(unzFile file, int pos) { -+ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) @@ -226,69 +206,60 @@ index ea05b7d62a..981ba3c0cb 100644 + + return pos; +} -+/* GODOT end */ + extern int ZEXPORT unzOpenCurrentFile(unzFile file) { return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); } diff --git a/thirdparty/minizip/unzip.h b/thirdparty/minizip/unzip.h -index 5cfc9c6274..0639674574 100644 +index 5cfc9c6274..37ff29b22a 100644 --- a/thirdparty/minizip/unzip.h +++ b/thirdparty/minizip/unzip.h -@@ -202,6 +202,10 @@ extern int ZEXPORT unzClose(unzFile file); +@@ -202,6 +202,8 @@ extern int ZEXPORT unzClose(unzFile file); these files MUST be closed with unzCloseCurrentFile before call unzClose. return UNZ_OK if there is no problem. */ -+/* GODOT start */ +extern void* unzGetOpaque(unzFile file); -+/* GODOT end */ + extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info *pglobal_info); -@@ -390,6 +394,13 @@ extern int ZEXPORT unzReadCurrentFile(unzFile file, +@@ -390,6 +392,11 @@ extern int ZEXPORT unzReadCurrentFile(unzFile file, (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ -+/* GODOT start */ +extern int ZEXPORT unzSeekCurrentFile(unzFile file, int pos); +/* + Seek to position in uncompressed data +*/ -+/* GODOT end */ + extern z_off_t ZEXPORT unztell(unzFile file); extern ZPOS64_T ZEXPORT unztell64(unzFile file); diff --git a/thirdparty/minizip/zip.c b/thirdparty/minizip/zip.c -index 60bdffac34..1d2d918e72 100644 +index 60bdffac34..078a0a82ec 100644 --- a/thirdparty/minizip/zip.c +++ b/thirdparty/minizip/zip.c -@@ -820,9 +820,11 @@ extern zipFile ZEXPORT zipOpen3(const void *pathname, int append, zipcharpc* glo +@@ -820,9 +820,9 @@ extern zipFile ZEXPORT zipOpen3(const void *pathname, int append, zipcharpc* glo ziinit.z_filefunc.zseek32_file = NULL; ziinit.z_filefunc.ztell32_file = NULL; - if (pzlib_filefunc64_32_def==NULL) - fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); - else -+ /* GODOT start */ + if (pzlib_filefunc64_32_def==NULL) { + //fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); + } else -+ /* GODOT end */ ziinit.z_filefunc = *pzlib_filefunc64_32_def; ziinit.filestream = ZOPEN64(ziinit.z_filefunc, -@@ -1182,8 +1184,10 @@ extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char* filename, c +@@ -1182,8 +1182,8 @@ extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char* filename, c { if(zi->ci.method == Z_DEFLATED) { - zi->ci.stream.zalloc = (alloc_func)0; - zi->ci.stream.zfree = (free_func)0; -+ /* GODOT start */ + zi->ci.stream.zalloc = zi->z_filefunc.zfile_func64.alloc_mem; + zi->ci.stream.zfree = zi->z_filefunc.zfile_func64.free_mem; -+ /* GODOT end */ zi->ci.stream.opaque = (voidpf)0; if (windowBits>0) diff --git a/thirdparty/minizip/unzip.c b/thirdparty/minizip/unzip.c index 981ba3c0cb7..7e8a6ac2d38 100644 --- a/thirdparty/minizip/unzip.c +++ b/thirdparty/minizip/unzip.c @@ -152,9 +152,7 @@ typedef struct uLong compression_method; /* compression method (0==store) */ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ int raw; - /* GODOT start */ int extra_size; - /* GODOT end */ } file_in_zip64_read_info_s; @@ -516,10 +514,9 @@ local unzFile unzOpenInternal(const void *path, us.z_filefunc.zseek32_file = NULL; us.z_filefunc.ztell32_file = NULL; if (pzlib_filefunc64_32_def==NULL) - /* GODOT start */ + //fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); return NULL; // standard i/o not supported us.z_filefunc = *pzlib_filefunc64_32_def; - /* GODOT end */ us.is64bitOpenFunction = is64bitOpenFunction; @@ -707,17 +704,14 @@ extern unzFile ZEXPORT unzOpen64(const void *path) { return unzOpenInternal(path, NULL, 1); } -/* GODOT start */ extern void* unzGetOpaque(unzFile file) { - unz64_s* s; if (file==NULL) return NULL; s=(unz64_s*)file; return s->z_filefunc.zfile_func64.opaque; -}; -/* GODOT end */ +} /* Close a ZipFile opened with unzOpen. @@ -921,7 +915,6 @@ local int unz64local_GetCurrentFileInfoInternal(unzFile file, if (lSeek!=0) { - /* GODOT start */ if (lSeek<0) { // WORKAROUND for backwards seeking ZPOS64_T pos = ZTELL64(s->z_filefunc, s->filestream); @@ -930,14 +923,11 @@ local int unz64local_GetCurrentFileInfoInternal(unzFile file, else err=UNZ_ERRNO; } else { - /* GODOT end */ - if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) - lSeek=0; - else - err=UNZ_ERRNO; - /* GODOT start */ + if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; } - /* GODOT end */ } while(acc < file_info.size_file_extra) @@ -1475,10 +1465,8 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, } else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) { - /* GODOT start */ pfile_in_zip_read_info->stream.zalloc = s->z_filefunc.zfile_func64.alloc_mem; pfile_in_zip_read_info->stream.zfree = s->z_filefunc.zfile_func64.free_mem; - /* GODOT end */ pfile_in_zip_read_info->stream.opaque = (voidpf)0; pfile_in_zip_read_info->stream.next_in = 0; pfile_in_zip_read_info->stream.avail_in = 0; @@ -1511,9 +1499,7 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, iSizeVar; pfile_in_zip_read_info->stream.avail_in = (uInt)0; - /* GODOT start */ pfile_in_zip_read_info->extra_size = iSizeVar; - /* GODOT end */ s->pfile_in_zip_read = pfile_in_zip_read_info; s->encrypted = 0; @@ -1544,9 +1530,7 @@ extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, return UNZ_OK; } -/* GODOT start */ extern int ZEXPORT unzSeekCurrentFile(unzFile file, int pos) { - unz64_s* s; file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) @@ -1621,7 +1605,6 @@ extern int ZEXPORT unzSeekCurrentFile(unzFile file, int pos) { return pos; } -/* GODOT end */ extern int ZEXPORT unzOpenCurrentFile(unzFile file) { return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); diff --git a/thirdparty/minizip/unzip.h b/thirdparty/minizip/unzip.h index 06396745744..37ff29b22a9 100644 --- a/thirdparty/minizip/unzip.h +++ b/thirdparty/minizip/unzip.h @@ -202,9 +202,7 @@ extern int ZEXPORT unzClose(unzFile file); these files MUST be closed with unzCloseCurrentFile before call unzClose. return UNZ_OK if there is no problem. */ -/* GODOT start */ extern void* unzGetOpaque(unzFile file); -/* GODOT end */ extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info *pglobal_info); @@ -394,12 +392,10 @@ extern int ZEXPORT unzReadCurrentFile(unzFile file, (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ -/* GODOT start */ extern int ZEXPORT unzSeekCurrentFile(unzFile file, int pos); /* Seek to position in uncompressed data */ -/* GODOT end */ extern z_off_t ZEXPORT unztell(unzFile file); diff --git a/thirdparty/minizip/zip.c b/thirdparty/minizip/zip.c index 1d2d918e72a..078a0a82ec0 100644 --- a/thirdparty/minizip/zip.c +++ b/thirdparty/minizip/zip.c @@ -820,11 +820,9 @@ extern zipFile ZEXPORT zipOpen3(const void *pathname, int append, zipcharpc* glo ziinit.z_filefunc.zseek32_file = NULL; ziinit.z_filefunc.ztell32_file = NULL; - /* GODOT start */ if (pzlib_filefunc64_32_def==NULL) { //fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); } else - /* GODOT end */ ziinit.z_filefunc = *pzlib_filefunc64_32_def; ziinit.filestream = ZOPEN64(ziinit.z_filefunc, @@ -1184,10 +1182,8 @@ extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char* filename, c { if(zi->ci.method == Z_DEFLATED) { - /* GODOT start */ zi->ci.stream.zalloc = zi->z_filefunc.zfile_func64.alloc_mem; zi->ci.stream.zfree = zi->z_filefunc.zfile_func64.free_mem; - /* GODOT end */ zi->ci.stream.opaque = (voidpf)0; if (windowBits>0) diff --git a/thirdparty/noise/FastNoiseLite.h b/thirdparty/misc/FastNoiseLite.h similarity index 100% rename from thirdparty/noise/FastNoiseLite.h rename to thirdparty/misc/FastNoiseLite.h diff --git a/thirdparty/misc/ifaddrs-android.h b/thirdparty/misc/ifaddrs-android.h index 8de94324b8d..04ff2ca58bd 100644 --- a/thirdparty/misc/ifaddrs-android.h +++ b/thirdparty/misc/ifaddrs-android.h @@ -24,19 +24,19 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #ifndef TALK_BASE_IFADDRS_ANDROID_H_ #define TALK_BASE_IFADDRS_ANDROID_H_ + #include #include // Implementation of getifaddrs for Android. // Fills out a list of ifaddr structs (see below) which contain information // about every network interface available on the host. // See 'man getifaddrs' on Linux or OS X (nb: it is not a POSIX function). -// -- GODOT start -- #ifdef __cplusplus extern "C" { #endif -// -- GODOT end -- struct ifaddrs { struct ifaddrs* ifa_next; char* ifa_name; @@ -45,7 +45,6 @@ struct ifaddrs { struct sockaddr* ifa_netmask; // Real ifaddrs has broadcast, point to point and data members. // We don't need them (yet?). - // -- GODOT start -- // We never initialize the following members. We only define them to match the ifaddrs struct. union { @@ -53,13 +52,12 @@ struct ifaddrs { struct sockaddr *ifu_dstaddr; } ifa_ifu; void *ifa_data; - // -- GODOT end -- }; -// -- GODOT start -- #ifdef __cplusplus } #endif -// -- GODOT end -- + int getifaddrs(struct ifaddrs** result); void freeifaddrs(struct ifaddrs* addrs); + #endif // TALK_BASE_IFADDRS_ANDROID_H_ diff --git a/thirdparty/nvapi/nvapi_minimal.h b/thirdparty/misc/nvapi_minimal.h similarity index 100% rename from thirdparty/nvapi/nvapi_minimal.h rename to thirdparty/misc/nvapi_minimal.h diff --git a/thirdparty/noise/patches/namespace-warnings.patch b/thirdparty/misc/patches/FastNoiseLite-0001-namespace-warnings.patch similarity index 88% rename from thirdparty/noise/patches/namespace-warnings.patch rename to thirdparty/misc/patches/FastNoiseLite-0001-namespace-warnings.patch index 6348ae1f058..6635900973b 100644 --- a/thirdparty/noise/patches/namespace-warnings.patch +++ b/thirdparty/misc/patches/FastNoiseLite-0001-namespace-warnings.patch @@ -1,7 +1,7 @@ -diff --git a/thirdparty/noise/FastNoiseLite.h b/thirdparty/noise/FastNoiseLite.h +diff --git a/thirdparty/misc/FastNoiseLite.h b/thirdparty/misc/FastNoiseLite.h index ed97b0fcac..fb6dbcb92a 100644 ---- a/thirdparty/noise/FastNoiseLite.h -+++ b/thirdparty/noise/FastNoiseLite.h +--- a/thirdparty/misc/FastNoiseLite.h ++++ b/thirdparty/misc/FastNoiseLite.h @@ -52,6 +52,8 @@ #include diff --git a/thirdparty/misc/patches/ifaddrs-android-0001-complete-struct.patch b/thirdparty/misc/patches/ifaddrs-android-0001-complete-struct.patch new file mode 100644 index 00000000000..e2894ba2a8c --- /dev/null +++ b/thirdparty/misc/patches/ifaddrs-android-0001-complete-struct.patch @@ -0,0 +1,32 @@ +diff --git a/thirdparty/misc/ifaddrs-android.h b/thirdparty/misc/ifaddrs-android.h +index e7d81e813f..04ff2ca58b 100644 +--- a/thirdparty/misc/ifaddrs-android.h ++++ b/thirdparty/misc/ifaddrs-android.h +@@ -34,6 +34,9 @@ + // Fills out a list of ifaddr structs (see below) which contain information + // about every network interface available on the host. + // See 'man getifaddrs' on Linux or OS X (nb: it is not a POSIX function). ++#ifdef __cplusplus ++extern "C" { ++#endif + struct ifaddrs { + struct ifaddrs* ifa_next; + char* ifa_name; +@@ -42,7 +45,17 @@ struct ifaddrs { + struct sockaddr* ifa_netmask; + // Real ifaddrs has broadcast, point to point and data members. + // We don't need them (yet?). ++ // We never initialize the following members. We only define them to match the ifaddrs struct. ++ union ++ { ++ struct sockaddr *ifu_broadaddr; ++ struct sockaddr *ifu_dstaddr; ++ } ifa_ifu; ++ void *ifa_data; + }; ++#ifdef __cplusplus ++} ++#endif + + int getifaddrs(struct ifaddrs** result); + void freeifaddrs(struct ifaddrs* addrs); diff --git a/thirdparty/misc/patches/polypartition-godot-types.patch b/thirdparty/misc/patches/polypartition-0001-godot-types.patch similarity index 98% rename from thirdparty/misc/patches/polypartition-godot-types.patch rename to thirdparty/misc/patches/polypartition-0001-godot-types.patch index 5d8aba34371..f0a2ccef1a1 100644 --- a/thirdparty/misc/patches/polypartition-godot-types.patch +++ b/thirdparty/misc/patches/polypartition-0001-godot-types.patch @@ -1,5 +1,5 @@ diff --git a/thirdparty/misc/polypartition.cpp b/thirdparty/misc/polypartition.cpp -index 3a8a6efa83..8c5409bf24 100644 +index 3a8a6efa83..a725125ed0 100644 --- a/thirdparty/misc/polypartition.cpp +++ b/thirdparty/misc/polypartition.cpp @@ -26,7 +26,6 @@ @@ -528,15 +528,15 @@ index 3a8a6efa83..8c5409bf24 100644 // a tree, complexity requirements for operations are the same as // for the balanced binary search tree. - std::set edgeTree; -+ Set edgeTree; ++ RBSet edgeTree; // Store iterators to the edge tree elements. // This makes deleting existing edges much faster. - std::set::iterator *edgeTreeIterators, edgeIter; - edgeTreeIterators = new std::set::iterator[maxnumvertices]; - std::pair::iterator, bool> edgeTreeRet; -+ Set::Element **edgeTreeIterators, *edgeIter; -+ edgeTreeIterators = new Set::Element *[maxnumvertices]; -+ //Pair::iterator, bool> edgeTreeRet; ++ RBSet::Element **edgeTreeIterators, *edgeIter; ++ edgeTreeIterators = new RBSet::Element *[maxnumvertices]; ++ //Pair::iterator, bool> edgeTreeRet; for (i = 0; i < numvertices; i++) { - edgeTreeIterators[i] = edgeTree.end(); + edgeTreeIterators[i] = nullptr; @@ -671,8 +671,8 @@ index 3a8a6efa83..8c5409bf24 100644 void TPPLPartition::AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2, - TPPLVertexType *vertextypes, std::set::iterator *edgeTreeIterators, - std::set *edgeTree, long *helpers) { -+ TPPLVertexType *vertextypes, Set::Element **edgeTreeIterators, -+ Set *edgeTree, long *helpers) { ++ TPPLVertexType *vertextypes, RBSet::Element **edgeTreeIterators, ++ RBSet *edgeTree, long *helpers) { long newindex1, newindex2; newindex1 = *numvertices; @@ -713,7 +713,7 @@ index 3a8a6efa83..8c5409bf24 100644 } } diff --git a/thirdparty/misc/polypartition.h b/thirdparty/misc/polypartition.h -index f163f5d217..b2d905a3ef 100644 +index e1df6cef9e..c084bdf74c 100644 --- a/thirdparty/misc/polypartition.h +++ b/thirdparty/misc/polypartition.h @@ -24,8 +24,9 @@ @@ -724,7 +724,7 @@ index f163f5d217..b2d905a3ef 100644 -#include +#include "core/math/vector2.h" +#include "core/templates/list.h" -+#include "core/templates/set.h" ++#include "core/templates/rb_set.h" typedef double tppl_float; @@ -809,8 +809,8 @@ index f163f5d217..b2d905a3ef 100644 void AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2, - TPPLVertexType *vertextypes, std::set::iterator *edgeTreeIterators, - std::set *edgeTree, long *helpers); -+ TPPLVertexType *vertextypes, Set::Element **edgeTreeIterators, -+ Set *edgeTree, long *helpers); ++ TPPLVertexType *vertextypes, RBSet::Element **edgeTreeIterators, ++ RBSet *edgeTree, long *helpers); // Triangulates a monotone polygon, used in Triangulate_MONO. int TriangulateMonotone(TPPLPoly *inPoly, TPPLPolyList *triangles); diff --git a/thirdparty/misc/patches/polypartition-hole.patch b/thirdparty/misc/patches/polypartition-0002-shadow-warning.patch similarity index 100% rename from thirdparty/misc/patches/polypartition-hole.patch rename to thirdparty/misc/patches/polypartition-0002-shadow-warning.patch diff --git a/thirdparty/misc/patches/smaz-0001-write-string-warning.patch b/thirdparty/misc/patches/smaz-0001-write-string-warning.patch new file mode 100644 index 00000000000..c76d0590235 --- /dev/null +++ b/thirdparty/misc/patches/smaz-0001-write-string-warning.patch @@ -0,0 +1,54 @@ +diff --git a/thirdparty/misc/smaz.c b/thirdparty/misc/smaz.c +index aa674c3858..6f9ea20e67 100644 +--- a/thirdparty/misc/smaz.c ++++ b/thirdparty/misc/smaz.c +@@ -1,7 +1,7 @@ + #include + + /* Our compression codebook, used for compression */ +-static char *Smaz_cb[241] = { ++static const char *Smaz_cb[241] = { + "\002s,\266", "\003had\232\002leW", "\003on \216", "", "\001yS", + "\002ma\255\002li\227", "\003or \260", "", "\002ll\230\003s t\277", + "\004fromg\002mel", "", "\003its\332", "\001z\333", "\003ingF", "\001>\336", +@@ -76,7 +76,7 @@ static char *Smaz_rcb[254] = { + "e, ", " it", "whi", " ma", "ge", "x", "e c", "men", ".com" + }; + +-int smaz_compress(char *in, int inlen, char *out, int outlen) { ++int smaz_compress(const char *in, int inlen, char *out, int outlen) { + unsigned int h1,h2,h3=0; + int verblen = 0, _outlen = outlen; + char verb[256], *_out = out; +@@ -154,7 +154,7 @@ out: + return out-_out; + } + +-int smaz_decompress(char *in, int inlen, char *out, int outlen) { ++int smaz_decompress(const char *in, int inlen, char *out, int outlen) { + unsigned char *c = (unsigned char*) in; + char *_out = out; + int _outlen = outlen; +@@ -179,7 +179,7 @@ int smaz_decompress(char *in, int inlen, char *out, int outlen) { + inlen -= 2+len; + } else { + /* Codebook entry */ +- char *s = Smaz_rcb[*c]; ++ const char *s = Smaz_rcb[*c]; + int len = strlen(s); + + if (outlen < len) return _outlen+1; +diff --git a/thirdparty/misc/smaz.h b/thirdparty/misc/smaz.h +index ce9c35d6b2..d8e1f8a6a5 100644 +--- a/thirdparty/misc/smaz.h ++++ b/thirdparty/misc/smaz.h +@@ -1,7 +1,7 @@ + #ifndef _SMAZ_H + #define _SMAZ_H + +-int smaz_compress(char *in, int inlen, char *out, int outlen); +-int smaz_decompress(char *in, int inlen, char *out, int outlen); ++int smaz_compress(const char *in, int inlen, char *out, int outlen); ++int smaz_decompress(const char *in, int inlen, char *out, int outlen); + + #endif diff --git a/thirdparty/noise/LICENSE b/thirdparty/noise/LICENSE deleted file mode 100644 index dd6df2c160a..00000000000 --- a/thirdparty/noise/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright(c) 2020 Jordan Peck (jordan.me2@gmail.com) -Copyright(c) 2020 Contributors - -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. \ No newline at end of file diff --git a/thirdparty/openxr/patches/use-egl-from-glad.diff b/thirdparty/openxr/patches/0001-glad-egl.patch similarity index 68% rename from thirdparty/openxr/patches/use-egl-from-glad.diff rename to thirdparty/openxr/patches/0001-glad-egl.patch index 29c746d5c7a..9ab6c2efdf5 100644 --- a/thirdparty/openxr/patches/use-egl-from-glad.diff +++ b/thirdparty/openxr/patches/0001-glad-egl.patch @@ -1,6 +1,7 @@ -diff -Nur openxr-orig/src/common/xr_dependencies.h openxr/src/common/xr_dependencies.h ---- openxr-orig/src/common/xr_dependencies.h 2024-11-04 10:38:11.940682727 -0600 -+++ openxr/src/common/xr_dependencies.h 2024-11-04 10:38:46.351415476 -0600 +diff --git a/thirdparty/openxr/src/common/xr_dependencies.h b/thirdparty/openxr/src/common/xr_dependencies.h +index 55d93bfbac..a192a2ec6d 100644 +--- a/thirdparty/openxr/src/common/xr_dependencies.h ++++ b/thirdparty/openxr/src/common/xr_dependencies.h @@ -65,7 +65,11 @@ #endif // XR_USE_GRAPHICS_API_OPENGL diff --git a/thirdparty/spirv-reflect/patches/1-specialization-constants.patch b/thirdparty/spirv-reflect/patches/0001-specialization-constants.patch similarity index 88% rename from thirdparty/spirv-reflect/patches/1-specialization-constants.patch rename to thirdparty/spirv-reflect/patches/0001-specialization-constants.patch index ff11841451c..e8003e8d5c4 100644 --- a/thirdparty/spirv-reflect/patches/1-specialization-constants.patch +++ b/thirdparty/spirv-reflect/patches/0001-specialization-constants.patch @@ -1,19 +1,17 @@ diff --git a/thirdparty/spirv-reflect/spirv_reflect.c b/thirdparty/spirv-reflect/spirv_reflect.c -index b4f6bc17c2..c96dd85439 100644 +index b4f6bc17c2..ba64a3f54d 100644 --- a/thirdparty/spirv-reflect/spirv_reflect.c +++ b/thirdparty/spirv-reflect/spirv_reflect.c -@@ -1571,6 +1571,10 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle +@@ -1571,6 +1571,8 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle } break; case SpvDecorationSpecId: { -+// -- GODOT begin -- + uint32_t word_offset = p_node->word_offset + member_offset+ 3; + CHECKED_READU32(p_parser, word_offset, p_target_decorations->spec_id); -+// -- GODOT end -- spec_constant_count++; } break; -@@ -1692,21 +1696,45 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle +@@ -1692,21 +1694,43 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle } for (uint32_t i = 0; i < p_parser->node_count; ++i) { SpvReflectPrvNode* p_node = &(p_parser->nodes[i]); @@ -28,7 +26,6 @@ index b4f6bc17c2..c96dd85439 100644 - SpvReflectPrvNode* target_node = FindNode(p_parser, p_module->spec_constants[count].spirv_id); - if (IsNotNull(target_node)) { - p_module->spec_constants[count].name = target_node->name; -+// -- GODOT begin -- + const uint32_t count = p_module->spec_constant_count; + switch(p_node->op) { + default: continue; @@ -68,19 +65,17 @@ index b4f6bc17c2..c96dd85439 100644 + p_module->spec_constants[count].spirv_id = p_node->result_id; + + p_module->spec_constant_count++; -+// -- GODOT end -- } return SPV_REFLECT_RESULT_SUCCESS; diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h -index 9a42f14eed..4ea0319c5e 100644 +index 9a42f14eed..cf8cfe2183 100644 --- a/thirdparty/spirv-reflect/spirv_reflect.h +++ b/thirdparty/spirv-reflect/spirv_reflect.h -@@ -568,6 +568,17 @@ typedef struct SpvReflectCapability { +@@ -568,6 +568,15 @@ typedef struct SpvReflectCapability { } SpvReflectCapability; -+// -- GODOT begin -- +/*! @enum SpvReflectSpecializationConstantType + +*/ @@ -89,22 +84,19 @@ index 9a42f14eed..4ea0319c5e 100644 + SPV_REFLECT_SPECIALIZATION_CONSTANT_INT = 1, + SPV_REFLECT_SPECIALIZATION_CONSTANT_FLOAT = 2, +} SpvReflectSpecializationConstantType; -+// -- GODOT end -- + /*! @struct SpvReflectSpecId */ -@@ -575,6 +586,13 @@ typedef struct SpvReflectSpecializationConstant { +@@ -575,6 +584,11 @@ typedef struct SpvReflectSpecializationConstant { uint32_t spirv_id; uint32_t constant_id; const char* name; -+// -- GODOT begin -- + SpvReflectSpecializationConstantType constant_type; + union { + float float_value; + uint32_t int_bool_value; + } default_value; -+// -- GODOT end -- } SpvReflectSpecializationConstant; /*! @struct SpvReflectShaderModule diff --git a/thirdparty/spirv-reflect/patches/2-zero-size-for-sc-sized-arrays.patch b/thirdparty/spirv-reflect/patches/0002-zero-size-for-sc-sized-arrays.patch similarity index 86% rename from thirdparty/spirv-reflect/patches/2-zero-size-for-sc-sized-arrays.patch rename to thirdparty/spirv-reflect/patches/0002-zero-size-for-sc-sized-arrays.patch index dbf6069d075..b12642cd56c 100644 --- a/thirdparty/spirv-reflect/patches/2-zero-size-for-sc-sized-arrays.patch +++ b/thirdparty/spirv-reflect/patches/0002-zero-size-for-sc-sized-arrays.patch @@ -1,18 +1,16 @@ diff --git a/thirdparty/spirv-reflect/spirv_reflect.c b/thirdparty/spirv-reflect/spirv_reflect.c -index c96dd85439..2ca9c8580d 100644 +index ba64a3f54d..599667be26 100644 --- a/thirdparty/spirv-reflect/spirv_reflect.c +++ b/thirdparty/spirv-reflect/spirv_reflect.c -@@ -2692,6 +2692,13 @@ static SpvReflectResult ParseDescriptorBlockVariableSizes(SpvReflectPrvParser* p +@@ -2688,6 +2688,11 @@ static SpvReflectResult ParseDescriptorBlockVariableSizes(SpvReflectPrvParser* p // ...then array uint32_t element_count = (p_member_var->array.dims_count > 0 ? 1 : 0); for (uint32_t i = 0; i < p_member_var->array.dims_count; ++i) { -+// -- GODOT begin -- + if (p_member_var->array.spec_constant_op_ids[i] != (uint32_t)INVALID_VALUE) { + // Force size to be reported as 0 to effectively disable buffer size validation, since + // the value is unreliable anyway as only valid for the default values of the SCs involved. + element_count = 0; + } -+// -- GODOT end -- element_count *= p_member_var->array.dims[i]; } p_member_var->size = element_count * p_member_var->array.stride; diff --git a/thirdparty/spirv-reflect/spirv_reflect.c b/thirdparty/spirv-reflect/spirv_reflect.c index d6c926b40a1..599667be265 100644 --- a/thirdparty/spirv-reflect/spirv_reflect.c +++ b/thirdparty/spirv-reflect/spirv_reflect.c @@ -1571,10 +1571,8 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle } break; case SpvDecorationSpecId: { -// -- GODOT begin -- uint32_t word_offset = p_node->word_offset + member_offset+ 3; CHECKED_READU32(p_parser, word_offset, p_target_decorations->spec_id); -// -- GODOT end -- spec_constant_count++; } break; @@ -1696,7 +1694,6 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle } for (uint32_t i = 0; i < p_parser->node_count; ++i) { SpvReflectPrvNode* p_node = &(p_parser->nodes[i]); -// -- GODOT begin -- const uint32_t count = p_module->spec_constant_count; switch(p_node->op) { default: continue; @@ -1734,7 +1731,6 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser, SpvRefle p_module->spec_constants[count].spirv_id = p_node->result_id; p_module->spec_constant_count++; -// -- GODOT end -- } return SPV_REFLECT_RESULT_SUCCESS; @@ -2692,13 +2688,11 @@ static SpvReflectResult ParseDescriptorBlockVariableSizes(SpvReflectPrvParser* p // ...then array uint32_t element_count = (p_member_var->array.dims_count > 0 ? 1 : 0); for (uint32_t i = 0; i < p_member_var->array.dims_count; ++i) { -// -- GODOT begin -- if (p_member_var->array.spec_constant_op_ids[i] != (uint32_t)INVALID_VALUE) { // Force size to be reported as 0 to effectively disable buffer size validation, since // the value is unreliable anyway as only valid for the default values of the SCs involved. element_count = 0; } -// -- GODOT end -- element_count *= p_member_var->array.dims[i]; } p_member_var->size = element_count * p_member_var->array.stride; diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h index 4ea0319c5e0..cf8cfe2183c 100644 --- a/thirdparty/spirv-reflect/spirv_reflect.h +++ b/thirdparty/spirv-reflect/spirv_reflect.h @@ -568,7 +568,6 @@ typedef struct SpvReflectCapability { } SpvReflectCapability; -// -- GODOT begin -- /*! @enum SpvReflectSpecializationConstantType */ @@ -577,7 +576,6 @@ typedef enum SpvReflectSpecializationConstantType { SPV_REFLECT_SPECIALIZATION_CONSTANT_INT = 1, SPV_REFLECT_SPECIALIZATION_CONSTANT_FLOAT = 2, } SpvReflectSpecializationConstantType; -// -- GODOT end -- /*! @struct SpvReflectSpecId @@ -586,13 +584,11 @@ typedef struct SpvReflectSpecializationConstant { uint32_t spirv_id; uint32_t constant_id; const char* name; -// -- GODOT begin -- SpvReflectSpecializationConstantType constant_type; union { float float_value; uint32_t int_bool_value; } default_value; -// -- GODOT end -- } SpvReflectSpecializationConstant; /*! @struct SpvReflectShaderModule diff --git a/thirdparty/thorvg/patches/revert-tvgLines-bezier-precision-change.patch b/thirdparty/thorvg/patches/0001-revert-tvglines-bezier-precision.patch similarity index 100% rename from thirdparty/thorvg/patches/revert-tvgLines-bezier-precision-change.patch rename to thirdparty/thorvg/patches/0001-revert-tvglines-bezier-precision.patch diff --git a/thirdparty/thorvg/patches/fix-build-gcc15.patch b/thirdparty/thorvg/patches/0002-gcc15-include-fix.patch similarity index 100% rename from thirdparty/thorvg/patches/fix-build-gcc15.patch rename to thirdparty/thorvg/patches/0002-gcc15-include-fix.patch diff --git a/thirdparty/tinyexr/patches/0001-external-zlib.patch b/thirdparty/tinyexr/patches/0001-external-zlib.patch new file mode 100644 index 00000000000..90e02790a88 --- /dev/null +++ b/thirdparty/tinyexr/patches/0001-external-zlib.patch @@ -0,0 +1,12 @@ +diff --git a/thirdparty/tinyexr/tinyexr.cc b/thirdparty/tinyexr/tinyexr.cc +index fef8f66c98..7bdf827ed3 100644 +--- a/thirdparty/tinyexr/tinyexr.cc ++++ b/thirdparty/tinyexr/tinyexr.cc +@@ -4,5 +4,7 @@ + #endif + #endif + ++#include // Should come before including tinyexr. ++ + #define TINYEXR_IMPLEMENTATION + #include "tinyexr.h" diff --git a/thirdparty/tinyexr/tinyexr.cc b/thirdparty/tinyexr/tinyexr.cc index 70115ea5c29..7bdf827ed3f 100644 --- a/thirdparty/tinyexr/tinyexr.cc +++ b/thirdparty/tinyexr/tinyexr.cc @@ -4,9 +4,7 @@ #endif #endif -// -- GODOT start -- #include // Should come before including tinyexr. -// -- GODOT end -- #define TINYEXR_IMPLEMENTATION #include "tinyexr.h" diff --git a/thirdparty/vhacd/inc/btAlignedAllocator.h b/thirdparty/vhacd/inc/btAlignedAllocator.h index 94e71d51250..8011595d89b 100644 --- a/thirdparty/vhacd/inc/btAlignedAllocator.h +++ b/thirdparty/vhacd/inc/btAlignedAllocator.h @@ -22,9 +22,7 @@ subject to the following restrictions: #include "btScalar.h" -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- //#define BT_DEBUG_MEMORY_ALLOCATIONS 1 #ifdef BT_DEBUG_MEMORY_ALLOCATIONS @@ -106,8 +104,6 @@ class btAlignedAllocator { friend bool operator==(const self_type&, const self_type&) { return true; } }; -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_ALIGNED_ALLOCATOR diff --git a/thirdparty/vhacd/inc/btAlignedObjectArray.h b/thirdparty/vhacd/inc/btAlignedObjectArray.h index 1ce03d21bce..7446a8bfd92 100644 --- a/thirdparty/vhacd/inc/btAlignedObjectArray.h +++ b/thirdparty/vhacd/inc/btAlignedObjectArray.h @@ -38,9 +38,7 @@ subject to the following restrictions: #include //for placement new #endif //BT_USE_PLACEMENT_NEW -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- ///The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods ///It is developed to replace stl::vector to avoid portability issues, including STL alignment issues to add SIMD/SSE data @@ -449,8 +447,6 @@ class btAlignedObjectArray { } }; -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_OBJECT_ARRAY__ diff --git a/thirdparty/vhacd/inc/btConvexHullComputer.h b/thirdparty/vhacd/inc/btConvexHullComputer.h index 04bb96f64aa..194917cdecc 100644 --- a/thirdparty/vhacd/inc/btConvexHullComputer.h +++ b/thirdparty/vhacd/inc/btConvexHullComputer.h @@ -18,9 +18,7 @@ subject to the following restrictions: #include "btAlignedObjectArray.h" #include "btVector3.h" -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- /// Convex hull implementation based on Preparata and Hong /// See http://code.google.com/p/bullet/issues/detail?id=275 @@ -98,8 +96,6 @@ class btConvexHullComputer { } }; -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_CONVEX_HULL_COMPUTER_H diff --git a/thirdparty/vhacd/inc/btMinMax.h b/thirdparty/vhacd/inc/btMinMax.h index 9bc1e1c7707..12aaeda9c4d 100644 --- a/thirdparty/vhacd/inc/btMinMax.h +++ b/thirdparty/vhacd/inc/btMinMax.h @@ -17,9 +17,7 @@ subject to the following restrictions: #include "btScalar.h" -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- template SIMD_FORCE_INLINE const T& btMin(const T& a, const T& b) @@ -66,8 +64,6 @@ SIMD_FORCE_INLINE void btClamp(T& a, const T& lb, const T& ub) } } -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_GEN_MINMAX_H diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h index da2a5993cab..ef8546a4b5a 100644 --- a/thirdparty/vhacd/inc/btScalar.h +++ b/thirdparty/vhacd/inc/btScalar.h @@ -28,18 +28,14 @@ subject to the following restrictions: /* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/ #define BT_BULLET_VERSION 279 -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- inline int32_t btGetVersion() { return BT_BULLET_VERSION; } -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #if defined(DEBUG) || defined(_DEBUG) #define BT_DEBUG @@ -72,10 +68,8 @@ inline int32_t btGetVersion() #define btFsel(a, b, c) __fsel((a), (b), (c)) #else -// -- GODOT start -- //#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) #if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) && (!defined(_M_ARM)) && (!defined(_M_ARM64)) -// -- GODOT end -- #define BT_USE_SSE #include #endif @@ -210,9 +204,7 @@ inline int32_t btGetVersion() #endif //__CELLOS_LV2__ #endif -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- ///The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision. #if defined(BT_USE_DOUBLE_PRECISION) @@ -546,7 +538,6 @@ struct btTypedObject { } }; -// -- GODOT start -- // Cherry-picked from Bullet 2.88 to fix GH-27926 ///align a pointer to the provided alignment, upwards template @@ -567,10 +558,7 @@ T *btAlignPointer(T *unalignedPtr, size_t alignment) converter.integer &= bit_mask; return converter.ptr; } -// -- GODOT end -- -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_SCALAR_H diff --git a/thirdparty/vhacd/inc/btVector3.h b/thirdparty/vhacd/inc/btVector3.h index 4ed97167341..356a6a9cfce 100644 --- a/thirdparty/vhacd/inc/btVector3.h +++ b/thirdparty/vhacd/inc/btVector3.h @@ -26,9 +26,7 @@ subject to the following restrictions: #define btVector3DataName "btVector3FloatData" #endif //BT_USE_DOUBLE_PRECISION -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- /**@brief btVector3 can be used to represent 3D points and vectors. * It has an un-used w component to suit 16-byte alignment when btVector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user @@ -716,8 +714,6 @@ SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3Data& dataIn m_floats[i] = dataIn.m_floats[i]; } -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_VECTOR3_H diff --git a/thirdparty/vhacd/inc/vhacdICHull.h b/thirdparty/vhacd/inc/vhacdICHull.h index 925584cf52d..4075a9e0547 100644 --- a/thirdparty/vhacd/inc/vhacdICHull.h +++ b/thirdparty/vhacd/inc/vhacdICHull.h @@ -18,9 +18,7 @@ #include "vhacdManifoldMesh.h" #include "vhacdVector.h" -// -- GODOT start -- #include -// -- GODOT end -- namespace VHACD { //! Incremental Convex Hull algorithm (cf. http://cs.smith.edu/~orourke/books/ftp.html ). diff --git a/thirdparty/vhacd/inc/vhacdManifoldMesh.h b/thirdparty/vhacd/inc/vhacdManifoldMesh.h index 5eed4e13aa3..3f9d0394709 100644 --- a/thirdparty/vhacd/inc/vhacdManifoldMesh.h +++ b/thirdparty/vhacd/inc/vhacdManifoldMesh.h @@ -19,9 +19,7 @@ All rights reserved. #include "vhacdSArray.h" #include "vhacdVector.h" -// -- GODOT start -- #include -// -- GODOT end -- namespace VHACD { class TMMTriangle; diff --git a/thirdparty/vhacd/inc/vhacdMutex.h b/thirdparty/vhacd/inc/vhacdMutex.h index d587dd6387c..22acc2135a8 100644 --- a/thirdparty/vhacd/inc/vhacdMutex.h +++ b/thirdparty/vhacd/inc/vhacdMutex.h @@ -71,9 +71,7 @@ #include #endif -// -- GODOT start -- #if defined(__APPLE__) || !defined(__GLIBC__) -// -- GODOT end -- #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #endif diff --git a/thirdparty/vhacd/0001-bullet-namespace.patch b/thirdparty/vhacd/patches/0001-bullet-namespace.patch similarity index 69% rename from thirdparty/vhacd/0001-bullet-namespace.patch rename to thirdparty/vhacd/patches/0001-bullet-namespace.patch index cfb1ffeff07..095451bcdaf 100644 --- a/thirdparty/vhacd/0001-bullet-namespace.patch +++ b/thirdparty/vhacd/patches/0001-bullet-namespace.patch @@ -1,213 +1,177 @@ diff --git a/thirdparty/vhacd/inc/btAlignedAllocator.h b/thirdparty/vhacd/inc/btAlignedAllocator.h -index 11f6e12dc..94e71d512 100644 +index 11f6e12dca..8011595d89 100644 --- a/thirdparty/vhacd/inc/btAlignedAllocator.h +++ b/thirdparty/vhacd/inc/btAlignedAllocator.h -@@ -21,6 +21,11 @@ subject to the following restrictions: +@@ -21,6 +21,9 @@ subject to the following restrictions: ///that is better portable and more predictable #include "btScalar.h" + -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + //#define BT_DEBUG_MEMORY_ALLOCATIONS 1 #ifdef BT_DEBUG_MEMORY_ALLOCATIONS -@@ -101,4 +106,8 @@ public: +@@ -101,4 +104,6 @@ public: friend bool operator==(const self_type&, const self_type&) { return true; } }; -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_ALIGNED_ALLOCATOR diff --git a/thirdparty/vhacd/inc/btAlignedObjectArray.h b/thirdparty/vhacd/inc/btAlignedObjectArray.h -index e6620adf6..1ce03d21b 100644 +index e6620adf6f..7446a8bfd9 100644 --- a/thirdparty/vhacd/inc/btAlignedObjectArray.h +++ b/thirdparty/vhacd/inc/btAlignedObjectArray.h -@@ -38,6 +38,10 @@ subject to the following restrictions: +@@ -38,6 +38,8 @@ subject to the following restrictions: #include //for placement new #endif //BT_USE_PLACEMENT_NEW -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + ///The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods ///It is developed to replace stl::vector to avoid portability issues, including STL alignment issues to add SIMD/SSE data template -@@ -445,4 +449,8 @@ public: +@@ -445,4 +447,6 @@ public: } }; -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_OBJECT_ARRAY__ diff --git a/thirdparty/vhacd/inc/btConvexHullComputer.h b/thirdparty/vhacd/inc/btConvexHullComputer.h -index 3c5075c2c..04bb96f64 100644 +index 3c5075c2cb..194917cdec 100644 --- a/thirdparty/vhacd/inc/btConvexHullComputer.h +++ b/thirdparty/vhacd/inc/btConvexHullComputer.h -@@ -18,6 +18,10 @@ subject to the following restrictions: +@@ -18,6 +18,8 @@ subject to the following restrictions: #include "btAlignedObjectArray.h" #include "btVector3.h" -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + /// Convex hull implementation based on Preparata and Hong /// See http://code.google.com/p/bullet/issues/detail?id=275 /// Ole Kniemeyer, MAXON Computer GmbH -@@ -94,4 +98,8 @@ public: +@@ -94,4 +96,6 @@ public: } }; -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_CONVEX_HULL_COMPUTER_H diff --git a/thirdparty/vhacd/inc/btMinMax.h b/thirdparty/vhacd/inc/btMinMax.h -index 40b0ceb6e..9bc1e1c77 100644 +index 40b0ceb6ed..12aaeda9c4 100644 --- a/thirdparty/vhacd/inc/btMinMax.h +++ b/thirdparty/vhacd/inc/btMinMax.h -@@ -17,6 +17,10 @@ subject to the following restrictions: +@@ -17,6 +17,8 @@ subject to the following restrictions: #include "btScalar.h" -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + template SIMD_FORCE_INLINE const T& btMin(const T& a, const T& b) { -@@ -62,4 +66,8 @@ SIMD_FORCE_INLINE void btClamp(T& a, const T& lb, const T& ub) +@@ -62,4 +64,6 @@ SIMD_FORCE_INLINE void btClamp(T& a, const T& lb, const T& ub) } } -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_GEN_MINMAX_H diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h -index b814474bd..617fd7c44 100644 +index b814474bdf..404bcbcfe1 100644 --- a/thirdparty/vhacd/inc/btScalar.h +++ b/thirdparty/vhacd/inc/btScalar.h -@@ -28,11 +28,19 @@ subject to the following restrictions: +@@ -28,11 +28,15 @@ subject to the following restrictions: /* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/ #define BT_BULLET_VERSION 279 -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + inline int32_t btGetVersion() { return BT_BULLET_VERSION; } -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #if defined(DEBUG) || defined(_DEBUG) #define BT_DEBUG #endif -@@ -199,6 +207,10 @@ inline int32_t btGetVersion() +@@ -199,6 +203,8 @@ inline int32_t btGetVersion() #endif //__CELLOS_LV2__ #endif -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + ///The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision. #if defined(BT_USE_DOUBLE_PRECISION) typedef double btScalar; -@@ -530,4 +542,9 @@ struct btTypedObject { +@@ -530,4 +536,7 @@ struct btTypedObject { return m_objectType; } }; + -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_SCALAR_H diff --git a/thirdparty/vhacd/inc/btVector3.h b/thirdparty/vhacd/inc/btVector3.h -index 0f2fefbbd..4ed971673 100644 +index 0f2fefbbd5..356a6a9cfc 100644 --- a/thirdparty/vhacd/inc/btVector3.h +++ b/thirdparty/vhacd/inc/btVector3.h -@@ -26,6 +26,10 @@ subject to the following restrictions: +@@ -26,6 +26,8 @@ subject to the following restrictions: #define btVector3DataName "btVector3FloatData" #endif //BT_USE_DOUBLE_PRECISION -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + /**@brief btVector3 can be used to represent 3D points and vectors. * It has an un-used w component to suit 16-byte alignment when btVector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user * Ideally, this class should be replaced by a platform optimized SIMD version that keeps the data in registers -@@ -712,4 +716,8 @@ SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3Data& dataIn +@@ -712,4 +714,6 @@ SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3Data& dataIn m_floats[i] = dataIn.m_floats[i]; } -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_VECTOR3_H diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp -index 11d594f6c..ce0e7f26f 100644 +index 11d594f6c9..bbb8baa107 100644 --- a/thirdparty/vhacd/src/btAlignedAllocator.cpp +++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp -@@ -15,6 +15,10 @@ subject to the following restrictions: +@@ -15,6 +15,8 @@ subject to the following restrictions: #include "btAlignedAllocator.h" -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + #ifdef _MSC_VER #pragma warning(disable:4311 4302) #endif -@@ -177,4 +181,8 @@ void btAlignedFreeInternal(void* ptr) +@@ -177,4 +179,6 @@ void btAlignedFreeInternal(void* ptr) sAlignedFreeFunc(ptr); } -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- + #endif //BT_DEBUG_MEMORY_ALLOCATIONS diff --git a/thirdparty/vhacd/src/btConvexHullComputer.cpp b/thirdparty/vhacd/src/btConvexHullComputer.cpp -index d3d749adb..8ab34af2a 100644 +index d3d749adbe..4f224c8360 100644 --- a/thirdparty/vhacd/src/btConvexHullComputer.cpp +++ b/thirdparty/vhacd/src/btConvexHullComputer.cpp -@@ -49,6 +49,10 @@ typedef unsigned long long int32_t uint64_t; +@@ -49,6 +49,8 @@ typedef unsigned long long int32_t uint64_t; #include #endif -+// -- GODOT start -- +namespace VHACD { -+// -- GODOT end -- + // Convex hull implementation based on Preparata and Hong // Ole Kniemeyer, MAXON Computer GmbH class btConvexHullInternal { -@@ -2477,3 +2481,7 @@ btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, in +@@ -2477,3 +2479,5 @@ btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, in return shift; } + -+// -- GODOT start -- +}; // namespace VHACD -+// -- GODOT end -- diff --git a/thirdparty/vhacd/0002-fpermissive-fix.patch b/thirdparty/vhacd/patches/0002-fpermissive-fix.patch similarity index 82% rename from thirdparty/vhacd/0002-fpermissive-fix.patch rename to thirdparty/vhacd/patches/0002-fpermissive-fix.patch index 965df2944ab..f1de1abfc50 100644 --- a/thirdparty/vhacd/0002-fpermissive-fix.patch +++ b/thirdparty/vhacd/patches/0002-fpermissive-fix.patch @@ -1,12 +1,11 @@ diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h -index 487205062..52297cd78 100644 +index 404bcbcfe1..db00a3c428 100644 --- a/thirdparty/vhacd/inc/btScalar.h +++ b/thirdparty/vhacd/inc/btScalar.h -@@ -535,6 +535,29 @@ struct btTypedObject { +@@ -537,6 +537,27 @@ struct btTypedObject { } }; -+// -- GODOT start -- +// Cherry-picked from Bullet 2.88 to fix GH-27926 +///align a pointer to the provided alignment, upwards +template @@ -27,27 +26,24 @@ index 487205062..52297cd78 100644 + converter.integer &= bit_mask; + return converter.ptr; +} -+// -- GODOT end -- + - // -- GODOT start -- }; // namespace VHACD - // -- GODOT end -- + + #endif //BT_SCALAR_H diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp -index ce0e7f26f..8dee31e7e 100644 +index bbb8baa107..4d7f4b1b2f 100644 --- a/thirdparty/vhacd/src/btAlignedAllocator.cpp +++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp -@@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment) +@@ -70,8 +70,10 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment) real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1)); if (real) { - offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1); - ret = (void*)((real + sizeof(void*)) + offset); -+ // -- GODOT start -- + // Synced with Bullet 2.88 to fix GH-27926 + //offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1); + //ret = (void*)((real + sizeof(void*)) + offset); + ret = btAlignPointer(real + sizeof(void *), alignment); -+ // -- GODOT end -- *((void**)(ret)-1) = (void*)(real); } else { diff --git a/thirdparty/vhacd/0003-fix-musl-build.patch b/thirdparty/vhacd/patches/0003-fix-musl-build.patch similarity index 77% rename from thirdparty/vhacd/0003-fix-musl-build.patch rename to thirdparty/vhacd/patches/0003-fix-musl-build.patch index 67af8546f36..15a92a222f1 100644 --- a/thirdparty/vhacd/0003-fix-musl-build.patch +++ b/thirdparty/vhacd/patches/0003-fix-musl-build.patch @@ -1,15 +1,13 @@ diff --git a/thirdparty/vhacd/inc/vhacdMutex.h b/thirdparty/vhacd/inc/vhacdMutex.h -index 6b09259200..d587dd6387 100644 +index 6b09259200..22acc2135a 100644 --- a/thirdparty/vhacd/inc/vhacdMutex.h +++ b/thirdparty/vhacd/inc/vhacdMutex.h -@@ -71,7 +71,9 @@ +@@ -71,7 +71,7 @@ #include #endif -#if defined(__APPLE__) -+// -- GODOT start -- +#if defined(__APPLE__) || !defined(__GLIBC__) -+// -- GODOT end -- #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE #endif diff --git a/thirdparty/vhacd/0004-fix-uwp-arm-build.patch b/thirdparty/vhacd/patches/0004-fix-msvc-arm-build.patch similarity index 82% rename from thirdparty/vhacd/0004-fix-uwp-arm-build.patch rename to thirdparty/vhacd/patches/0004-fix-msvc-arm-build.patch index 8a57aae7fd6..c927f68bed8 100644 --- a/thirdparty/vhacd/0004-fix-uwp-arm-build.patch +++ b/thirdparty/vhacd/patches/0004-fix-msvc-arm-build.patch @@ -1,16 +1,14 @@ diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h -index 3999a71521..4c9e0cf7ab 100644 +index db00a3c428..ef8546a4b5 100644 --- a/thirdparty/vhacd/inc/btScalar.h +++ b/thirdparty/vhacd/inc/btScalar.h -@@ -72,7 +72,10 @@ inline int32_t btGetVersion() +@@ -68,7 +68,8 @@ inline int32_t btGetVersion() #define btFsel(a, b, c) __fsel((a), (b), (c)) #else -#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) -+// -- GODOT start -- +//#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) +#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) && (!defined(_M_ARM)) && (!defined(_M_ARM64)) -+// -- GODOT end -- #define BT_USE_SSE #include #endif diff --git a/thirdparty/vhacd/0005-fix-scale-calculation.patch b/thirdparty/vhacd/patches/0005-fix-scale-calculation.patch similarity index 100% rename from thirdparty/vhacd/0005-fix-scale-calculation.patch rename to thirdparty/vhacd/patches/0005-fix-scale-calculation.patch diff --git a/thirdparty/vhacd/0006-fix-gcc13.patch b/thirdparty/vhacd/patches/0006-gcc13-include-fix.patch similarity index 66% rename from thirdparty/vhacd/0006-fix-gcc13.patch rename to thirdparty/vhacd/patches/0006-gcc13-include-fix.patch index b8df42b9362..fbbcfc6fede 100644 --- a/thirdparty/vhacd/0006-fix-gcc13.patch +++ b/thirdparty/vhacd/patches/0006-gcc13-include-fix.patch @@ -1,38 +1,27 @@ diff --git a/thirdparty/vhacd/inc/vhacdICHull.h b/thirdparty/vhacd/inc/vhacdICHull.h -index 132bdcfb3e..925584cf52 100644 +index 132bdcfb3e..4075a9e054 100644 --- a/thirdparty/vhacd/inc/vhacdICHull.h +++ b/thirdparty/vhacd/inc/vhacdICHull.h -@@ -18,6 +18,10 @@ +@@ -18,6 +18,8 @@ #include "vhacdManifoldMesh.h" #include "vhacdVector.h" -+// -- GODOT start -- +#include -+// -- GODOT end -- + namespace VHACD { //! Incremental Convex Hull algorithm (cf. http://cs.smith.edu/~orourke/books/ftp.html ). enum ICHullError { diff --git a/thirdparty/vhacd/inc/vhacdManifoldMesh.h b/thirdparty/vhacd/inc/vhacdManifoldMesh.h -index a48f53c5c5..5eed4e13aa 100644 +index a48f53c5c5..3f9d039470 100644 --- a/thirdparty/vhacd/inc/vhacdManifoldMesh.h +++ b/thirdparty/vhacd/inc/vhacdManifoldMesh.h -@@ -18,6 +18,11 @@ All rights reserved. +@@ -18,6 +18,9 @@ All rights reserved. #include "vhacdCircularList.h" #include "vhacdSArray.h" #include "vhacdVector.h" + -+// -- GODOT start -- +#include -+// -- GODOT end -- + namespace VHACD { class TMMTriangle; class TMMEdge; -@@ -139,4 +144,4 @@ private: - friend class ICHull; - }; - } --#endif // VHACD_MANIFOLD_MESH_H -\ No newline at end of file -+#endif // VHACD_MANIFOLD_MESH_H diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp index 8dee31e7e36..4d7f4b1b2f1 100644 --- a/thirdparty/vhacd/src/btAlignedAllocator.cpp +++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp @@ -15,9 +15,7 @@ subject to the following restrictions: #include "btAlignedAllocator.h" -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- #ifdef _MSC_VER #pragma warning(disable:4311 4302) @@ -72,12 +70,10 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment) real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1)); if (real) { - // -- GODOT start -- // Synced with Bullet 2.88 to fix GH-27926 //offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1); //ret = (void*)((real + sizeof(void*)) + offset); ret = btAlignPointer(real + sizeof(void *), alignment); - // -- GODOT end -- *((void**)(ret)-1) = (void*)(real); } else { @@ -185,8 +181,6 @@ void btAlignedFreeInternal(void* ptr) sAlignedFreeFunc(ptr); } -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- #endif //BT_DEBUG_MEMORY_ALLOCATIONS diff --git a/thirdparty/vhacd/src/btConvexHullComputer.cpp b/thirdparty/vhacd/src/btConvexHullComputer.cpp index 8ab34af2abd..4f224c83604 100644 --- a/thirdparty/vhacd/src/btConvexHullComputer.cpp +++ b/thirdparty/vhacd/src/btConvexHullComputer.cpp @@ -49,9 +49,7 @@ typedef unsigned long long int32_t uint64_t; #include #endif -// -- GODOT start -- namespace VHACD { -// -- GODOT end -- // Convex hull implementation based on Preparata and Hong // Ole Kniemeyer, MAXON Computer GmbH @@ -2482,6 +2480,4 @@ btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, in return shift; } -// -- GODOT start -- }; // namespace VHACD -// -- GODOT end -- diff --git a/thirdparty/vulkan/patches/VKEnumStringHelper-use-godot-vulkan.patch b/thirdparty/vulkan/patches/0001-VKEnumStringHelper-godot-vulkan.patch similarity index 100% rename from thirdparty/vulkan/patches/VKEnumStringHelper-use-godot-vulkan.patch rename to thirdparty/vulkan/patches/0001-VKEnumStringHelper-godot-vulkan.patch diff --git a/thirdparty/vulkan/patches/VMA-use-godot-vulkan.patch b/thirdparty/vulkan/patches/0002-VMA-godot-vulkan.patch similarity index 100% rename from thirdparty/vulkan/patches/VMA-use-godot-vulkan.patch rename to thirdparty/vulkan/patches/0002-VMA-godot-vulkan.patch diff --git a/thirdparty/vulkan/patches/0003-VMA-add-vmaCalculateLazilyAllocatedBytes.patch b/thirdparty/vulkan/patches/0003-VMA-add-vmaCalculateLazilyAllocatedBytes.patch index 4c0d9093522..6c5f68932a6 100644 --- a/thirdparty/vulkan/patches/0003-VMA-add-vmaCalculateLazilyAllocatedBytes.patch +++ b/thirdparty/vulkan/patches/0003-VMA-add-vmaCalculateLazilyAllocatedBytes.patch @@ -1,12 +1,11 @@ diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h -index ecb84094b9..50ff4ea1c2 100644 +index ecb84094b9..c436209896 100644 --- a/thirdparty/vulkan/vk_mem_alloc.h +++ b/thirdparty/vulkan/vk_mem_alloc.h -@@ -1713,6 +1713,21 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( +@@ -1713,6 +1713,19 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( VmaAllocator VMA_NOT_NULL allocator, VmaTotalStatistics* VMA_NOT_NULL pStats); -+// -- GODOT begin -- +/** \brief Retrieves lazily allocated bytes + +This function is called "calculate" not "get" because it has to traverse all @@ -19,16 +18,14 @@ index ecb84094b9..50ff4ea1c2 100644 +*/ +VMA_CALL_PRE uint64_t VMA_CALL_POST vmaCalculateLazilyAllocatedBytes( + VmaAllocator VMA_NOT_NULL allocator); -+// -- GODOT end -- + /** \brief Retrieves information about current memory usage and budget for all memory heaps. \param allocator -@@ -14912,6 +14927,28 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( +@@ -14912,6 +14925,26 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( allocator->CalculateStatistics(pStats); } -+// -- GODOT begin -- +VMA_CALL_PRE uint64_t VMA_CALL_POST vmaCalculateLazilyAllocatedBytes( + VmaAllocator allocator) +{ @@ -48,7 +45,6 @@ index ecb84094b9..50ff4ea1c2 100644 + } + return total_lazilily_allocated_bytes; +} -+// -- GODOT end -- + VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets( VmaAllocator allocator, diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h index 50ff4ea1c23..c4362098964 100644 --- a/thirdparty/vulkan/vk_mem_alloc.h +++ b/thirdparty/vulkan/vk_mem_alloc.h @@ -1713,7 +1713,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( VmaAllocator VMA_NOT_NULL allocator, VmaTotalStatistics* VMA_NOT_NULL pStats); -// -- GODOT begin -- /** \brief Retrieves lazily allocated bytes This function is called "calculate" not "get" because it has to traverse all @@ -1726,7 +1725,6 @@ become outdated. */ VMA_CALL_PRE uint64_t VMA_CALL_POST vmaCalculateLazilyAllocatedBytes( VmaAllocator VMA_NOT_NULL allocator); -// -- GODOT end -- /** \brief Retrieves information about current memory usage and budget for all memory heaps. @@ -14927,7 +14925,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics( allocator->CalculateStatistics(pStats); } -// -- GODOT begin -- VMA_CALL_PRE uint64_t VMA_CALL_POST vmaCalculateLazilyAllocatedBytes( VmaAllocator allocator) { @@ -14947,7 +14944,6 @@ VMA_CALL_PRE uint64_t VMA_CALL_POST vmaCalculateLazilyAllocatedBytes( } return total_lazilily_allocated_bytes; } -// -- GODOT end -- VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets( VmaAllocator allocator, diff --git a/thirdparty/wslay/patches/0001-msvc-build-fix.patch b/thirdparty/wslay/patches/0001-msvc-build-fix.patch new file mode 100644 index 00000000000..dab365bba62 --- /dev/null +++ b/thirdparty/wslay/patches/0001-msvc-build-fix.patch @@ -0,0 +1,16 @@ +diff --git a/thirdparty/wslay/wslay/wslay.h b/thirdparty/wslay/wslay/wslay.h +index 7ab850111a..7d63bdb2ce 100644 +--- a/thirdparty/wslay/wslay/wslay.h ++++ b/thirdparty/wslay/wslay/wslay.h +@@ -33,6 +33,11 @@ extern "C" { + #include + #include + ++#if defined(_MSC_VER) ++#include ++typedef SSIZE_T ssize_t; ++#endif ++ + /* + * wslay/wslayver.h is generated from wslay/wslayver.h.in by + * configure. The projects which do not use autotools can set diff --git a/thirdparty/wslay/patches/msvcfix.diff b/thirdparty/wslay/patches/msvcfix.diff deleted file mode 100644 index f58b6d44f07..00000000000 --- a/thirdparty/wslay/patches/msvcfix.diff +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/includes/wslay/wslay.h -index 77a4e8253f..ac6873613f 100644 ---- a/thirdparty/wslay/includes/wslay/wslay.h -+++ b/thirdparty/wslay/includes/wslay/wslay.h -@@ -33,6 +33,13 @@ extern "C" { - #include - #include - -+/* GODOT ADDITTION */ -+#if defined(_MSC_VER) -+#include -+typedef SSIZE_T ssize_t; -+#endif -+/* GODOT END */ -+ - /* - * wslay/wslayver.h is generated from wslay/wslayver.h.in by - * configure. The projects which do not use autotools can set diff --git a/thirdparty/wslay/wslay/wslay.h b/thirdparty/wslay/wslay/wslay.h index b7fe516ba3b..7d63bdb2ce0 100644 --- a/thirdparty/wslay/wslay/wslay.h +++ b/thirdparty/wslay/wslay/wslay.h @@ -33,12 +33,10 @@ extern "C" { #include #include -/* GODOT ADDITTION */ #if defined(_MSC_VER) #include typedef SSIZE_T ssize_t; #endif -/* GODOT END */ /* * wslay/wslayver.h is generated from wslay/wslayver.h.in by From a3d03717c0862825bab8c4acdeb889345cd04760 Mon Sep 17 00:00:00 2001 From: Hilderin <81109165+Hilderin@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:51:30 -0500 Subject: [PATCH 043/114] Fix Floating Window request close when a dialog is opened --- editor/plugins/embedded_process.cpp | 6 ++++++ editor/plugins/embedded_process.h | 1 + editor/plugins/game_view_plugin.cpp | 9 +++++---- platform/linuxbsd/x11/display_server_x11.cpp | 16 +++++++++++++++- platform/linuxbsd/x11/display_server_x11.h | 1 + platform/windows/display_server_windows.cpp | 16 +++++++++++++++- platform/windows/display_server_windows.h | 1 + servers/display_server.cpp | 5 +++++ servers/display_server.h | 1 + 9 files changed, 50 insertions(+), 6 deletions(-) diff --git a/editor/plugins/embedded_process.cpp b/editor/plugins/embedded_process.cpp index 1638c437125..72c87bfc1c6 100644 --- a/editor/plugins/embedded_process.cpp +++ b/editor/plugins/embedded_process.cpp @@ -200,6 +200,12 @@ void EmbeddedProcess::reset() { queue_redraw(); } +void EmbeddedProcess::request_close() { + if (current_process_id != 0 && embedding_completed) { + DisplayServer::get_singleton()->request_close_embedded_process(current_process_id); + } +} + void EmbeddedProcess::_try_embed_process() { bool is_visible = is_visible_in_tree(); Error err = DisplayServer::get_singleton()->embed_process(window->get_window_id(), current_process_id, get_screen_embedded_window_rect(), is_visible, is_visible && application_has_focus && embedding_grab_focus); diff --git a/editor/plugins/embedded_process.h b/editor/plugins/embedded_process.h index 3e800923a75..abd2c0f36e2 100644 --- a/editor/plugins/embedded_process.h +++ b/editor/plugins/embedded_process.h @@ -76,6 +76,7 @@ class EmbeddedProcess : public Control { public: void embed_process(OS::ProcessID p_pid); void reset(); + void request_close(); void set_window_size(const Size2i p_window_size); void set_keep_aspect(bool p_keep_aspect); diff --git a/editor/plugins/game_view_plugin.cpp b/editor/plugins/game_view_plugin.cpp index a6d73cf9e15..3b8a91c5fc3 100644 --- a/editor/plugins/game_view_plugin.cpp +++ b/editor/plugins/game_view_plugin.cpp @@ -798,16 +798,17 @@ void GameView::_window_close_request() { // Before the parent window closed, we close the embedded game. That prevents // the embedded game to be seen without a parent window for a fraction of second. if (EditorRunBar::get_singleton()->is_playing() && (embedded_process->is_embedding_completed() || embedded_process->is_embedding_in_progress())) { - // Try to gracefully close the window. That way, the NOTIFICATION_WM_CLOSE_REQUEST - // notification should be propagated in the game process. - embedded_process->reset(); - // When the embedding is not complete, we need to kill the process. // If the game is paused, the close request will not be processed by the game, so it's better to kill the process. if (paused || embedded_process->is_embedding_in_progress()) { + embedded_process->reset(); // Call deferred to prevent the _stop_pressed callback to be executed before the wrapper window // actually closes. callable_mp(EditorRunBar::get_singleton(), &EditorRunBar::stop_playing).call_deferred(); + } else { + // Try to gracefully close the window. That way, the NOTIFICATION_WM_CLOSE_REQUEST + // notification should be propagated in the game process. + embedded_process->request_close(); } } } diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index 95181a1c817..cbf963c59a0 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -5926,7 +5926,7 @@ Error DisplayServerX11::embed_process(WindowID p_window, OS::ProcessID p_pid, co return OK; } -Error DisplayServerX11::remove_embedded_process(OS::ProcessID p_pid) { +Error DisplayServerX11::request_close_embedded_process(OS::ProcessID p_pid) { _THREAD_SAFE_METHOD_ if (!embedded_processes.has(p_pid)) { @@ -5956,6 +5956,20 @@ Error DisplayServerX11::remove_embedded_process(OS::ProcessID p_pid) { // Restore default error handler. XSetErrorHandler(oldHandler); + return OK; +} + +Error DisplayServerX11::remove_embedded_process(OS::ProcessID p_pid) { + _THREAD_SAFE_METHOD_ + + if (!embedded_processes.has(p_pid)) { + return ERR_DOES_NOT_EXIST; + } + + EmbeddedProcessData *ep = embedded_processes.get(p_pid); + + request_close_embedded_process(p_pid); + embedded_processes.erase(p_pid); memdelete(ep); diff --git a/platform/linuxbsd/x11/display_server_x11.h b/platform/linuxbsd/x11/display_server_x11.h index edd70d454da..b21d9024627 100644 --- a/platform/linuxbsd/x11/display_server_x11.h +++ b/platform/linuxbsd/x11/display_server_x11.h @@ -540,6 +540,7 @@ class DisplayServerX11 : public DisplayServer { virtual void window_start_resize(WindowResizeEdge p_edge, WindowID p_window) override; virtual Error embed_process(WindowID p_window, OS::ProcessID p_pid, const Rect2i &p_rect, bool p_visible, bool p_grab_focus) override; + virtual Error request_close_embedded_process(OS::ProcessID p_pid) override; virtual Error remove_embedded_process(OS::ProcessID p_pid) override; virtual OS::ProcessID get_focused_process_id() override; diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index d0ddac4b7f9..6f92cc0d621 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -3004,7 +3004,7 @@ Error DisplayServerWindows::embed_process(WindowID p_window, OS::ProcessID p_pid return OK; } -Error DisplayServerWindows::remove_embedded_process(OS::ProcessID p_pid) { +Error DisplayServerWindows::request_close_embedded_process(OS::ProcessID p_pid) { _THREAD_SAFE_METHOD_ if (!embedded_processes.has(p_pid)) { @@ -3016,6 +3016,20 @@ Error DisplayServerWindows::remove_embedded_process(OS::ProcessID p_pid) { // Send a close message to gracefully close the process. PostMessage(ep->window_handle, WM_CLOSE, 0, 0); + return OK; +} + +Error DisplayServerWindows::remove_embedded_process(OS::ProcessID p_pid) { + _THREAD_SAFE_METHOD_ + + if (!embedded_processes.has(p_pid)) { + return ERR_DOES_NOT_EXIST; + } + + EmbeddedProcessData *ep = embedded_processes.get(p_pid); + + request_close_embedded_process(p_pid); + // This is a workaround to ensure the parent window correctly regains focus after the // embedded window is closed. When the embedded window is closed while it has focus, // the parent window (the editor) does not become active. It appears focused but is not truly activated. diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 71de7a73769..30f71c8c7e1 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -837,6 +837,7 @@ class DisplayServerWindows : public DisplayServer { virtual void enable_for_stealing_focus(OS::ProcessID pid) override; virtual Error embed_process(WindowID p_window, OS::ProcessID p_pid, const Rect2i &p_rect, bool p_visible, bool p_grab_focus) override; + virtual Error request_close_embedded_process(OS::ProcessID p_pid) override; virtual Error remove_embedded_process(OS::ProcessID p_pid) override; virtual OS::ProcessID get_focused_process_id() override; diff --git a/servers/display_server.cpp b/servers/display_server.cpp index bf3d428420a..6dd9044617e 100644 --- a/servers/display_server.cpp +++ b/servers/display_server.cpp @@ -679,6 +679,11 @@ Error DisplayServer::embed_process(WindowID p_window, OS::ProcessID p_pid, const return ERR_UNAVAILABLE; } +Error DisplayServer::request_close_embedded_process(OS::ProcessID p_pid) { + WARN_PRINT("Embedded process not supported by this display server."); + return ERR_UNAVAILABLE; +} + Error DisplayServer::remove_embedded_process(OS::ProcessID p_pid) { WARN_PRINT("Embedded process not supported by this display server."); return ERR_UNAVAILABLE; diff --git a/servers/display_server.h b/servers/display_server.h index 30bb533a5d3..79cf9ffc44b 100644 --- a/servers/display_server.h +++ b/servers/display_server.h @@ -577,6 +577,7 @@ class DisplayServer : public Object { virtual void enable_for_stealing_focus(OS::ProcessID pid); virtual Error embed_process(WindowID p_window, OS::ProcessID p_pid, const Rect2i &p_rect, bool p_visible, bool p_grab_focus); + virtual Error request_close_embedded_process(OS::ProcessID p_pid); virtual Error remove_embedded_process(OS::ProcessID p_pid); virtual OS::ProcessID get_focused_process_id(); From a6ff5187637ada695a432b6b43912305734aaff0 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Thu, 6 Feb 2025 10:31:32 +0200 Subject: [PATCH 044/114] Add ZWSP to the list of space characters. --- core/string/char_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/string/char_utils.h b/core/string/char_utils.h index 62ab4e9584d..c14851f9ec0 100644 --- a/core/string/char_utils.h +++ b/core/string/char_utils.h @@ -117,7 +117,7 @@ constexpr bool is_control(char32_t p_char) { } constexpr bool is_whitespace(char32_t p_char) { - return (p_char == ' ') || (p_char == 0x00a0) || (p_char == 0x1680) || (p_char >= 0x2000 && p_char <= 0x200a) || (p_char == 0x202f) || (p_char == 0x205f) || (p_char == 0x3000) || (p_char == 0x2028) || (p_char == 0x2029) || (p_char >= 0x0009 && p_char <= 0x000d) || (p_char == 0x0085); + return (p_char == ' ') || (p_char == 0x00a0) || (p_char == 0x1680) || (p_char >= 0x2000 && p_char <= 0x200b) || (p_char == 0x202f) || (p_char == 0x205f) || (p_char == 0x3000) || (p_char == 0x2028) || (p_char == 0x2029) || (p_char >= 0x0009 && p_char <= 0x000d) || (p_char == 0x0085); } constexpr bool is_linebreak(char32_t p_char) { From d616ea5462cca744c354a42ffacbd21d768a40ae Mon Sep 17 00:00:00 2001 From: HolonProduction Date: Tue, 4 Feb 2025 10:25:19 +0100 Subject: [PATCH 045/114] Fix enum value lookup jump --- modules/gdscript/gdscript_editor.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index cccfff6a844..062d522b681 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -3956,10 +3956,14 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co } else { const int dot_pos = doc_enum_name.rfind_char('.'); if (dot_pos >= 0) { + Error err = OK; r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT; - r_result.class_name = doc_enum_name.left(dot_pos); - r_result.class_member = p_symbol; if (base_type.class_type != nullptr) { + // For script enums the value isn't accessible as class constant so we need the full enum name. + r_result.class_name = doc_enum_name; + r_result.class_member = p_symbol; + r_result.script = GDScriptCache::get_shallow_script(base_type.script_path, err); + r_result.script_path = base_type.script_path; const String enum_name = doc_enum_name.substr(dot_pos + 1); if (base_type.class_type->has_member(enum_name)) { const GDScriptParser::ClassNode::Member member = base_type.class_type->get_member(enum_name); @@ -3972,8 +3976,19 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co } } } + } else if (base_type.script_type.is_valid()) { + // For script enums the value isn't accessible as class constant so we need the full enum name. + r_result.class_name = doc_enum_name; + r_result.class_member = p_symbol; + r_result.script = base_type.script_type; + r_result.script_path = base_type.script_path; + // TODO: Find a way to obtain enum value location for a script + r_result.location = base_type.script_type->get_member_line(doc_enum_name.substr(dot_pos + 1)); + } else { + r_result.class_name = doc_enum_name.left(dot_pos); + r_result.class_member = p_symbol; } - return OK; + return err; } } } else if (Variant::has_builtin_method(Variant::DICTIONARY, p_symbol)) { From d39ac94c41a8502e06ee7942bc6b8bebde40cf88 Mon Sep 17 00:00:00 2001 From: Dario Date: Wed, 5 Feb 2025 14:55:52 -0300 Subject: [PATCH 046/114] Add loop annotations to ubershaders to prevent loop unrolling. --- .../shaders/scene_forward_lights_inc.glsl | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl index 41861c5bb9a..5296b96c9c6 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl @@ -1,5 +1,18 @@ // Functions related to lighting +#extension GL_EXT_control_flow_attributes : require + +// This annotation macro must be placed before any loops that rely on specialization constants as their upper bound. +// Drivers may choose to unroll these loops based on the possible range of the value that can be deduced from the +// spec constant, which can lead to their code generation taking a much longer time than desired. +#ifdef UBERSHADER +// Prefer to not unroll loops on the ubershader to reduce code size as much as possible. +#define SPEC_CONSTANT_LOOP_ANNOTATION [[dont_unroll]] +#else +// Don't make an explicit hint on specialized shaders. +#define SPEC_CONSTANT_LOOP_ANNOTATION +#endif + float D_GGX(float cos_theta_m, float alpha) { float a = cos_theta_m * alpha; float k = alpha / (1.0 - cos_theta_m * cos_theta_m + a * a); @@ -257,6 +270,7 @@ float sample_directional_pcf_shadow(texture2D shadow, vec2 shadow_pixel_size, ve float avg = 0.0; + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_directional_soft_shadow_samples(); i++) { avg += textureProj(sampler2DShadow(shadow, shadow_sampler), vec4(pos + shadow_pixel_size * (disk_rotation * scene_data_block.data.directional_soft_shadow_kernel[i].xy), depth, 1.0)); } @@ -283,6 +297,7 @@ float sample_pcf_shadow(texture2D shadow, vec2 shadow_pixel_size, vec3 coord, fl float avg = 0.0; + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_soft_shadow_samples(); i++) { avg += textureProj(sampler2DShadow(shadow, shadow_sampler), vec4(pos + shadow_pixel_size * (disk_rotation * scene_data_block.data.soft_shadow_kernel[i].xy), depth, 1.0)); } @@ -309,6 +324,7 @@ float sample_omni_pcf_shadow(texture2D shadow, float blur_scale, vec2 coord, vec float avg = 0.0; vec2 offset_scale = blur_scale * 2.0 * scene_data_block.data.shadow_atlas_pixel_size / uv_rect.zw; + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_soft_shadow_samples(); i++) { vec2 offset = offset_scale * (disk_rotation * scene_data_block.data.soft_shadow_kernel[i].xy); vec2 sample_coord = coord + offset; @@ -346,6 +362,7 @@ float sample_directional_soft_shadow(texture2D shadow, vec3 pssm_coord, vec2 tex disk_rotation = mat2(vec2(cr, -sr), vec2(sr, cr)); } + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_directional_penumbra_shadow_samples(); i++) { vec2 suv = pssm_coord.xy + (disk_rotation * scene_data_block.data.directional_penumbra_shadow_kernel[i].xy) * tex_scale; float d = textureLod(sampler2D(shadow, SAMPLER_LINEAR_CLAMP), suv, 0.0).r; @@ -362,6 +379,8 @@ float sample_directional_soft_shadow(texture2D shadow, vec3 pssm_coord, vec2 tex tex_scale *= penumbra; float s = 0.0; + + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_directional_penumbra_shadow_samples(); i++) { vec2 suv = pssm_coord.xy + (disk_rotation * scene_data_block.data.directional_penumbra_shadow_kernel[i].xy) * tex_scale; s += textureProj(sampler2DShadow(shadow, shadow_sampler), vec4(suv, pssm_coord.z, 1.0)); @@ -465,6 +484,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v tangent *= omni_lights.data[idx].soft_shadow_size * omni_lights.data[idx].soft_shadow_scale; bitangent *= omni_lights.data[idx].soft_shadow_size * omni_lights.data[idx].soft_shadow_scale; + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_penumbra_shadow_samples(); i++) { vec2 disk = disk_rotation * scene_data_block.data.penumbra_shadow_kernel[i].xy; @@ -501,6 +521,8 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v z_norm += omni_lights.data[idx].inv_radius * omni_lights.data[idx].shadow_bias; shadow = 0.0; + + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_penumbra_shadow_samples(); i++) { vec2 disk = disk_rotation * scene_data_block.data.penumbra_shadow_kernel[i].xy; vec3 pos = local_vert + tangent * disk.x + bitangent * disk.y; @@ -757,6 +779,8 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v float uv_size = spot_lights.data[idx].soft_shadow_size * z_norm * spot_lights.data[idx].soft_shadow_scale; vec2 clamp_max = spot_lights.data[idx].atlas_rect.xy + spot_lights.data[idx].atlas_rect.zw; + + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_penumbra_shadow_samples(); i++) { vec2 suv = shadow_uv + (disk_rotation * scene_data_block.data.penumbra_shadow_kernel[i].xy) * uv_size; suv = clamp(suv, spot_lights.data[idx].atlas_rect.xy, clamp_max); @@ -774,6 +798,8 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v uv_size *= penumbra; shadow = 0.0; + + SPEC_CONSTANT_LOOP_ANNOTATION for (uint i = 0; i < sc_penumbra_shadow_samples(); i++) { vec2 suv = shadow_uv + (disk_rotation * scene_data_block.data.penumbra_shadow_kernel[i].xy) * uv_size; suv = clamp(suv, spot_lights.data[idx].atlas_rect.xy, clamp_max); From 0c4834b20f7a1c00770db7a516f29c69543790f4 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Thu, 6 Feb 2025 12:46:04 +0100 Subject: [PATCH 047/114] Decrease default Max Rays per Pass setting to 4 to fix some lightmapping crashes --- doc/classes/ProjectSettings.xml | 8 ++++++-- modules/lightmapper_rd/register_types.cpp | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 6bdd24ecb83..f10d5de9396 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -2735,17 +2735,21 @@ The VoxelGI quality to use. High quality leads to more precise lighting and better reflections, but is slower to render. This setting does not affect the baked data and doesn't require baking the [VoxelGI] again to apply. [b]Note:[/b] This property is only read when the project starts. To control VoxelGI quality at runtime, call [method RenderingServer.voxel_gi_set_quality] instead. - + The maximum number of rays that can be thrown per pass when baking lightmaps with [LightmapGI]. Depending on the scene, adjusting this value may result in higher GPU utilization when baking lightmaps, leading to faster bake times. + [b]Note:[/b] Using a value that is too high for your system can cause crashes due to the GPU being unresponsive for long periods of time, and the graphics driver being reset by the OS. The maximum number of rays that can be thrown per pass when baking dynamic object lighting in [LightmapProbe]s with [LightmapGI]. Depending on the scene, adjusting this value may result in higher GPU utilization when baking lightmaps, leading to faster bake times. + [b]Note:[/b] Using a value that is too high for your system can cause crashes due to the GPU being unresponsive for long periods of time, and the graphics driver being reset by the OS. The maximum number of retry rays that can be thrown per pass when hitting a transparent surface when baking lightmaps with [LightmapGI]. Depending on the scene, reducing this value may lead to faster bake times. + [b]Note:[/b] Using a value that is too high for your system can cause crashes due to the GPU being unresponsive for long periods of time, and the graphics driver being reset by the OS. - The region size to use when baking lightmaps with [LightmapGI]. + The region size to use when baking lightmaps with [LightmapGI]. The specified value is rounded up to the nearest power of 2. + [b]Note:[/b] Using a value that is too high for your system can cause crashes due to the GPU being unresponsive for long periods of time, and the graphics driver being reset by the OS. The number of rays to use for baking dynamic object lighting in [LightmapProbe]s when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_HIGH]. diff --git a/modules/lightmapper_rd/register_types.cpp b/modules/lightmapper_rd/register_types.cpp index de8c7d08525..b00fe167a7d 100644 --- a/modules/lightmapper_rd/register_types.cpp +++ b/modules/lightmapper_rd/register_types.cpp @@ -50,7 +50,7 @@ void initialize_lightmapper_rd_module(ModuleInitializationLevel p_level) { GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_quality/medium_quality_ray_count", PROPERTY_HINT_RANGE, "1,4096,1,or_greater"), 128); GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_quality/high_quality_ray_count", PROPERTY_HINT_RANGE, "1,4096,1,or_greater"), 512); GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_quality/ultra_quality_ray_count", PROPERTY_HINT_RANGE, "1,4096,1,or_greater"), 2048); - GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_performance/max_rays_per_pass", PROPERTY_HINT_RANGE, "1,256,1,or_greater"), 32); + GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_performance/max_rays_per_pass", PROPERTY_HINT_RANGE, "1,256,1,or_greater"), 4); GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_performance/region_size", PROPERTY_HINT_RANGE, "1,4096,1,or_greater"), 512); GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/lightmapping/bake_performance/max_transparency_rays", PROPERTY_HINT_RANGE, "1,256,1,or_greater"), 8); From 65509ae4fff0fc9dfa22fa787624611a36175ac2 Mon Sep 17 00:00:00 2001 From: kobewi Date: Thu, 6 Feb 2025 16:36:37 +0100 Subject: [PATCH 048/114] Improve UID file creation condition --- core/io/resource_loader.cpp | 14 ++++++++++++++ core/io/resource_loader.h | 1 + editor/editor_file_system.cpp | 4 ++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 7cc91ef4318..04fd641f244 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -1196,6 +1196,20 @@ bool ResourceLoader::has_custom_uid_support(const String &p_path) { return false; } +bool ResourceLoader::should_create_uid_file(const String &p_path) { + const String local_path = _validate_local_path(p_path); + if (FileAccess::exists(local_path + ".uid")) { + return false; + } + + for (int i = 0; i < loader_count; i++) { + if (loader[i]->recognize_path(local_path)) { + return !loader[i]->has_custom_uid_support(); + } + } + return false; +} + String ResourceLoader::_path_remap(const String &p_path, bool *r_translation_remapped) { String new_path = p_path; diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h index 56052b6a6fc..10a82e811d0 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -246,6 +246,7 @@ class ResourceLoader { static String get_resource_script_class(const String &p_path); static ResourceUID::ID get_resource_uid(const String &p_path); static bool has_custom_uid_support(const String &p_path); + static bool should_create_uid_file(const String &p_path); static void get_dependencies(const String &p_path, List *p_dependencies, bool p_add_types = false); static Error rename_dependencies(const String &p_path, const HashMap &p_map); static bool is_import_valid(const String &p_path); diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 1db6c2a188e..2d10e4305ea 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -1263,7 +1263,7 @@ void EditorFileSystem::_process_file_system(const ScannedDirectory *p_scan_dir, } } - if (ResourceLoader::exists(path) && !ResourceLoader::has_custom_uid_support(path) && !FileAccess::exists(path + ".uid")) { + if (ResourceLoader::should_create_uid_file(path)) { // Create a UID file and new UID, if it's invalid. Ref f = FileAccess::open(path + ".uid", FileAccess::WRITE); if (f.is_valid()) { @@ -2345,7 +2345,7 @@ void EditorFileSystem::update_files(const Vector &p_script_paths) { ResourceUID::get_singleton()->update_cache(); } else { - if (ResourceLoader::exists(file) && !ResourceLoader::has_custom_uid_support(file) && !FileAccess::exists(file + ".uid")) { + if (ResourceLoader::should_create_uid_file(file)) { Ref f = FileAccess::open(file + ".uid", FileAccess::WRITE); if (f.is_valid()) { const ResourceUID::ID id = ResourceUID::get_singleton()->create_id(); From 4391d88c1a5dcd6d75e4a9d8b8a9fa827a0b9e90 Mon Sep 17 00:00:00 2001 From: Jordyfel Date: Thu, 6 Feb 2025 19:10:44 +0200 Subject: [PATCH 049/114] Fix regression in moving resources in filesystem dock --- editor/filesystem_dock.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index bdf13d3d064..1cc37457312 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -1488,11 +1488,6 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ break; } } - } else { - Ref res = ResourceCache::get_ref(old_path); - if (res.is_valid()) { - res->set_path_cache(new_path); - } } } From 96bde8f221ff88d12d0c49a8ed40ed52e925dc9f Mon Sep 17 00:00:00 2001 From: David Snopek Date: Thu, 6 Feb 2025 11:24:20 -0600 Subject: [PATCH 050/114] JavaClassWrapper: Give additional error when trying to call non-static method directly on the class --- platform/android/java_class_wrapper.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platform/android/java_class_wrapper.cpp b/platform/android/java_class_wrapper.cpp index 58af3c761bf..a690a4f691e 100644 --- a/platform/android/java_class_wrapper.cpp +++ b/platform/android/java_class_wrapper.cpp @@ -156,6 +156,9 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method, } if (!method) { + if (r_error.error == Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL) { + ERR_PRINT(vformat(R"(Cannot call static function "%s" on Java class "%s" directly. Make an instance instead.)", p_method, java_class_name)); + } return true; //no version convinces } From 8e8f93cf0cde2862b942801c55e00683b8a86609 Mon Sep 17 00:00:00 2001 From: Malcolm Anderson Date: Mon, 3 Feb 2025 17:35:19 -0800 Subject: [PATCH 051/114] Display correct symbol in warning when unique name is used without @onready annotation Add tests for `GET_NODE_DEFAULT_WITHOUT_ONREADY` warning with unique nodes Small modifications to tests --- modules/gdscript/gdscript_analyzer.cpp | 7 ++++++- .../warnings/get_node_without_onready.gd | 16 ++++++++++++++-- .../warnings/get_node_without_onready.out | 4 ++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index 60109efc4d5..99fab724e8d 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -1093,7 +1093,12 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class, } } if (is_get_node) { - parser->push_warning(member.variable, GDScriptWarning::GET_NODE_DEFAULT_WITHOUT_ONREADY, is_using_shorthand ? "$" : "get_node()"); + String offending_syntax = "get_node()"; + if (is_using_shorthand) { + GDScriptParser::GetNodeNode *get_node_node = static_cast(expr); + offending_syntax = get_node_node->use_dollar ? "$" : "%"; + } + parser->push_warning(member.variable, GDScriptWarning::GET_NODE_DEFAULT_WITHOUT_ONREADY, offending_syntax); } } } diff --git a/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.gd b/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.gd index c1776fe1b4d..5feb1ad4e76 100644 --- a/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.gd +++ b/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.gd @@ -1,6 +1,6 @@ extends Node -var add_node = do_add_node() # Hack to have one node on init and not fail at runtime. +var add_node = do_add_nodes() # Hack to have nodes on init and not fail at runtime. var shorthand = $Node var with_self = self.get_node(^"Node") @@ -8,11 +8,23 @@ var without_self = get_node(^"Node") var with_cast = get_node(^"Node") as Node var shorthand_with_cast = $Node as Node +var shorthand_unique = %UniqueNode +var shorthand_in_dollar_unique = $"%UniqueNode" +var without_self_unique = get_node(^"%UniqueNode") +var shorthand_with_cast_unique = %UniqueNode as Node + func test(): print("warn") -func do_add_node(): +func do_add_nodes(): var node = Node.new() node.name = "Node" @warning_ignore("unsafe_call_argument") add_child(node) + + var unique_node = Node.new() + unique_node.name = "UniqueNode" + @warning_ignore("unsafe_call_argument") + add_child(unique_node) + unique_node.owner = self + unique_node.unique_name_in_owner = true diff --git a/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.out b/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.out index ad92088a127..fcfa7b3c45c 100644 --- a/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.out +++ b/modules/gdscript/tests/scripts/analyzer/warnings/get_node_without_onready.out @@ -4,4 +4,8 @@ GDTEST_OK ~~ WARNING at line 7: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "get_node()" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. ~~ WARNING at line 8: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "get_node()" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. ~~ WARNING at line 9: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "$" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. +~~ WARNING at line 11: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "%" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. +~~ WARNING at line 12: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "$" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. +~~ WARNING at line 13: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "get_node()" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. +~~ WARNING at line 14: (GET_NODE_DEFAULT_WITHOUT_ONREADY) The default value is using "%" which won't return nodes in the scene tree before "_ready()" is called. Use the "@onready" annotation to solve this. warn From 8714b36171ed0e1f13b163e2f8a50b62b6cc0c76 Mon Sep 17 00:00:00 2001 From: BlueCube3310 <53150244+BlueCube3310@users.noreply.github.com> Date: Thu, 6 Feb 2025 20:17:49 +0100 Subject: [PATCH 052/114] Fix rendering material when UV2 is compressed --- drivers/gles3/shaders/scene.glsl | 9 ++++++++- .../forward_clustered/scene_forward_clustered.glsl | 9 ++++++++- .../shaders/forward_mobile/scene_forward_mobile.glsl | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index f61bb73a85a..03e8a7c03ad 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -713,7 +713,14 @@ void main() { #endif #ifdef RENDER_MATERIAL - gl_Position.xy = (uv2_attrib.xy + uv_offset) * 2.0 - 1.0; + vec2 uv_dest_attrib; + if (uv_scale != vec4(0.0)) { + uv_dest_attrib = (uv2_attrib.xy - 0.5) * uv_scale.zw; + } else { + uv_dest_attrib = uv2_attrib.xy; + } + + gl_Position.xy = (uv_dest_attrib + uv_offset) * 2.0 - 1.0; gl_Position.z = 0.00001; gl_Position.w = 1.0; #endif diff --git a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl index 242d29d047b..f31a8de16b8 100644 --- a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl +++ b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl @@ -652,8 +652,15 @@ void vertex_shader(vec3 vertex_input, #endif #ifdef MODE_RENDER_MATERIAL if (scene_data.material_uv2_mode) { + vec2 uv_dest_attrib; + if (uv_scale != vec4(0.0)) { + uv_dest_attrib = (uv2_attrib.xy - 0.5) * uv_scale.zw; + } else { + uv_dest_attrib = uv2_attrib.xy; + } + vec2 uv_offset = unpackHalf2x16(draw_call.uv_offset); - gl_Position.xy = (uv2_attrib.xy + uv_offset) * 2.0 - 1.0; + gl_Position.xy = (uv_dest_attrib + uv_offset) * 2.0 - 1.0; gl_Position.z = 0.00001; gl_Position.w = 1.0; } diff --git a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl index 6ca6ad8fac0..dfcc285297a 100644 --- a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl +++ b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl @@ -557,7 +557,14 @@ void main() { #endif // MODE_RENDER_DEPTH #ifdef MODE_RENDER_MATERIAL if (scene_data.material_uv2_mode) { - gl_Position.xy = (uv2_attrib.xy + draw_call.uv_offset) * 2.0 - 1.0; + vec2 uv_dest_attrib; + if (uv_scale != vec4(0.0)) { + uv_dest_attrib = (uv2_attrib.xy - 0.5) * uv_scale.zw; + } else { + uv_dest_attrib = uv2_attrib.xy; + } + + gl_Position.xy = (uv_dest_attrib + draw_call.uv_offset) * 2.0 - 1.0; gl_Position.z = 0.00001; gl_Position.w = 1.0; } From b676944dcf5e46d6228aed5e7e3692a4080b4724 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Thu, 6 Feb 2025 14:45:55 -0800 Subject: [PATCH 053/114] Ensure instance uniforms are freed by updating dirty items before freeing. --- servers/rendering/renderer_canvas_cull.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/rendering/renderer_canvas_cull.cpp b/servers/rendering/renderer_canvas_cull.cpp index 9f420bb756b..4b02aa4e25b 100644 --- a/servers/rendering/renderer_canvas_cull.cpp +++ b/servers/rendering/renderer_canvas_cull.cpp @@ -2605,8 +2605,8 @@ bool RendererCanvasCull::free(RID p_rid) { } canvas_item_set_material(canvas_item->self, RID()); - canvas_item->instance_uniforms.free(canvas_item->self); update_dirty_items(); + canvas_item->instance_uniforms.free(canvas_item->self); if (canvas_item->canvas_group != nullptr) { memdelete(canvas_item->canvas_group); From e12a424bc569ac5ae9ff2944a8df7fc11b157d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 7 Feb 2025 01:04:13 +0100 Subject: [PATCH 054/114] Workaround mingw-gcc LTO ICE by re-adding some dead code... Not my finest work, but without that code removed in #102179, mingw-gcc 14.2.1 on Fedora 41 (but also confirmed with versions on macOS and WSL) crashes when linking with LTO. We need to dig deeper to understand the bug, report it upstream and work it around in a cleaner way. But for now this unblocks building Windows binaries with LTO, and should be harmless. --- platform/ios/export/export_plugin.cpp | 237 ++++++++++++++++++++++++++ platform/ios/export/export_plugin.h | 2 + 2 files changed, 239 insertions(+) diff --git a/platform/ios/export/export_plugin.cpp b/platform/ios/export/export_plugin.cpp index 370e7345bee..06f0ba90580 100644 --- a/platform/ios/export/export_plugin.cpp +++ b/platform/ios/export/export_plugin.cpp @@ -1256,6 +1256,167 @@ struct ExportLibsData { String dest_dir; }; +bool EditorExportPlatformIOS::_archive_has_arm64(const String &p_path, uint32_t *r_cputype, uint32_t *r_cpusubtype) const { + bool has_arm64_image = false; + if (FileAccess::exists(p_path)) { + if (LipO::is_lipo(p_path)) { + // LipO. + Ref lipo; + lipo.instantiate(); + if (lipo->open_file(p_path)) { + for (int i = 0; i < lipo->get_arch_count(); i++) { + if (lipo->get_arch_cputype(i) == 0x100000c && lipo->get_arch_cpusubtype(i) == 0) { + has_arm64_image = true; + break; + } + } + } + lipo->close(); + } else { + // Single architecture archive. + Ref sim_f = FileAccess::open(p_path, FileAccess::READ); + if (sim_f.is_valid()) { + char magic[9] = {}; + sim_f->get_buffer((uint8_t *)&magic[0], 8); + if (String(magic) == String("!\n")) { + while (!sim_f->eof_reached()) { + // Read file metadata. + char name_short[17] = {}; + char size_short[11] = {}; + sim_f->get_buffer((uint8_t *)&name_short[0], 16); + sim_f->seek(sim_f->get_position() + 12 + 6 + 6 + 8); // Skip modification time, owner ID, group ID, file mode. + sim_f->get_buffer((uint8_t *)&size_short[0], 10); + sim_f->seek(sim_f->get_position() + 2); // Skip end marker. + + int64_t file_size = String(size_short).to_int(); + int64_t next_off = sim_f->get_position() + file_size; + + String name = String(name_short); // Skip extended name. + if (name.is_empty() || file_size == 0) { + break; + } + if (name.begins_with("#1/")) { + int64_t name_len = String(name_short).replace("#1/", "").to_int(); + sim_f->seek(sim_f->get_position() + name_len); + } + + // Read file content. + uint32_t obj_magic = sim_f->get_32(); + + bool swap = (obj_magic == 0xcffaedfe || obj_magic == 0xcefaedfe); + if (obj_magic == 0xcefaedfe || obj_magic == 0xfeedface || obj_magic == 0xcffaedfe || obj_magic == 0xfeedfacf) { + uint32_t cputype = sim_f->get_32(); + uint32_t cpusubtype = sim_f->get_32(); + if (swap) { + cputype = BSWAP32(cputype); + cpusubtype = BSWAP32(cpusubtype); + } + if (r_cputype) { + *r_cputype = cputype; + } + if (r_cpusubtype) { + *r_cpusubtype = cpusubtype; + } + if (cputype == 0x100000c && cpusubtype == 0) { + has_arm64_image = true; + } + break; + } + sim_f->seek(next_off); + } + } + sim_f->close(); + } + } + } + return has_arm64_image; +} + +int EditorExportPlatformIOS::_archive_convert_to_simulator(const String &p_path) const { + int commands_patched = 0; + Ref sim_f = FileAccess::open(p_path, FileAccess::READ_WRITE); + if (sim_f.is_valid()) { + char magic[9] = {}; + sim_f->get_buffer((uint8_t *)&magic[0], 8); + if (String(magic) == String("!\n")) { + while (!sim_f->eof_reached()) { + // Read file metadata. + char name_short[17] = {}; + char size_short[11] = {}; + sim_f->get_buffer((uint8_t *)&name_short[0], 16); + sim_f->seek(sim_f->get_position() + 12 + 6 + 6 + 8); // Skip modification time, owner ID, group ID, file mode. + sim_f->get_buffer((uint8_t *)&size_short[0], 10); + sim_f->seek(sim_f->get_position() + 2); // Skip end marker. + + int64_t file_size = String(size_short).to_int(); + int64_t next_off = sim_f->get_position() + file_size; + + String name = String(name_short); // Skip extended name. + if (name.is_empty() || file_size == 0) { + break; + } + if (name.begins_with("#1/")) { + int64_t name_len = String(name_short).replace("#1/", "").to_int(); + sim_f->seek(sim_f->get_position() + name_len); + } + + // Read file content. + uint32_t obj_magic = sim_f->get_32(); + + bool swap = (obj_magic == 0xcffaedfe || obj_magic == 0xcefaedfe); + if (obj_magic == 0xcefaedfe || obj_magic == 0xfeedface || obj_magic == 0xcffaedfe || obj_magic == 0xfeedfacf) { + uint32_t cputype = sim_f->get_32(); + uint32_t cpusubtype = sim_f->get_32(); + uint32_t filetype = sim_f->get_32(); + uint32_t ncmds = sim_f->get_32(); + sim_f->get_32(); // Commands total size. + sim_f->get_32(); // Commands flags. + if (obj_magic == 0xcffaedfe || obj_magic == 0xfeedfacf) { + sim_f->get_32(); // Reserved, 64-bit only. + } + if (swap) { + ncmds = BSWAP32(ncmds); + cputype = BSWAP32(cputype); + cpusubtype = BSWAP32(cpusubtype); + filetype = BSWAP32(filetype); + } + if (cputype == 0x100000C && cpusubtype == 0 && filetype == 1) { + // ARM64, object file. + for (uint32_t i = 0; i < ncmds; i++) { + int64_t cmdofs = sim_f->get_position(); + uint32_t cmdid = sim_f->get_32(); + uint32_t cmdsize = sim_f->get_32(); + if (swap) { + cmdid = BSWAP32(cmdid); + cmdsize = BSWAP32(cmdsize); + } + if (cmdid == MachO::LoadCommandID::LC_BUILD_VERSION) { + int64_t platform = sim_f->get_32(); + if (swap) { + platform = BSWAP32(platform); + } + if (platform == MachO::PlatformID::PLATFORM_IOS) { + sim_f->seek(cmdofs + 4 + 4); + uint32_t new_id = MachO::PlatformID::PLATFORM_IOSSIMULATOR; + if (swap) { + new_id = BSWAP32(new_id); + } + sim_f->store_32(new_id); + commands_patched++; + } + } + sim_f->seek(cmdofs + cmdsize); + } + } + } + sim_f->seek(next_off); + } + } + sim_f->close(); + } + return commands_patched; +} + void EditorExportPlatformIOS::_check_xcframework_content(const String &p_path, int &r_total_libs, int &r_static_libs, int &r_dylibs, int &r_frameworks) const { Ref plist; plist.instantiate(); @@ -2260,6 +2421,82 @@ Error EditorExportPlatformIOS::_export_project_helper(const Refhas_setting("__dummy_setting_blame_akien_if_you_define_this_somehow")) { + String sim_lib_path = dest_dir + String(binary_name + ".xcframework").path_join("ios-arm64_x86_64-simulator").path_join("libgodot.a"); + String dev_lib_path = dest_dir + String(binary_name + ".xcframework").path_join("ios-arm64").path_join("libgodot.a"); + String tmp_lib_path = EditorPaths::get_singleton()->get_temp_dir().path_join(binary_name + "_lipo_"); + uint32_t cputype = 0; + uint32_t cpusubtype = 0; + if (!_archive_has_arm64(sim_lib_path, &cputype, &cpusubtype) && _archive_has_arm64(dev_lib_path) && FileAccess::exists(dev_lib_path)) { + add_message(EXPORT_MESSAGE_INFO, TTR("Export"), TTR("ARM64 simulator library, generating from device library.")); + + Vector tmp_lib_files; + Vector tmp_lib_cputypes; + // Extract/copy simulator lib. + if (FileAccess::exists(sim_lib_path)) { + if (LipO::is_lipo(sim_lib_path)) { + Ref lipo; + lipo.instantiate(); + if (lipo->open_file(sim_lib_path)) { + for (int i = 0; i < lipo->get_arch_count(); i++) { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + lipo->extract_arch(i, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(lipo->get_arch_cputype(i), lipo->get_arch_cpusubtype(i))); + } + } + } else { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + tmp_app_path->copy(sim_lib_path, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(cputype, cpusubtype)); + } + } + // Copy device lib. + if (LipO::is_lipo(dev_lib_path)) { + Ref lipo; + lipo.instantiate(); + if (lipo->open_file(dev_lib_path)) { + for (int i = 0; i < lipo->get_arch_count(); i++) { + if (lipo->get_arch_cputype(i) == 0x100000c && lipo->get_arch_cpusubtype(i) == 0) { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + lipo->extract_arch(i, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(0x100000c, 0)); // ARM64. + break; + } + } + } + } else { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + tmp_app_path->copy(dev_lib_path, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(0x100000c, 0)); // ARM64. + } + + // Patch device lib. + int patch_count = _archive_convert_to_simulator(tmp_lib_path + itos(tmp_lib_files.size() - 1)); + if (patch_count == 0) { + add_message(EXPORT_MESSAGE_WARNING, TTR("Export"), TTR("Unable to generate ARM64 simulator library.")); + } else { + // Repack. + Ref lipo; + lipo.instantiate(); + lipo->create_file(sim_lib_path, tmp_lib_files, tmp_lib_cputypes); + } + + // Cleanup. + for (const String &E : tmp_lib_files) { + tmp_app_path->remove(E); + } + } + } + // Generate translations files. Dictionary appnames = GLOBAL_GET("application/config/name_localized"); diff --git a/platform/ios/export/export_plugin.h b/platform/ios/export/export_plugin.h index e18e2c5ed68..3d423ae8d10 100644 --- a/platform/ios/export/export_plugin.h +++ b/platform/ios/export/export_plugin.h @@ -136,6 +136,8 @@ class EditorExportPlatformIOS : public EditorExportPlatform { Vector _get_supported_architectures() const; Vector _get_preset_architectures(const Ref &p_preset) const; + bool _archive_has_arm64(const String &p_path, uint32_t *r_cputype = nullptr, uint32_t *r_cpusubtype = nullptr) const; + int _archive_convert_to_simulator(const String &p_path) const; void _check_xcframework_content(const String &p_path, int &r_total_libs, int &r_static_libs, int &r_dylibs, int &r_frameworks) const; Error _convert_to_framework(const String &p_source, const String &p_destination, const String &p_id) const; From 577f90feba0a0f88ba0478bac9b10a3724795d4e Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Fri, 7 Feb 2025 09:30:02 +0800 Subject: [PATCH 055/114] Fix heap-use-after-free when changing 2D editor selection --- editor/plugins/canvas_item_editor_plugin.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index a58659f29b4..7381f2ab83a 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -3659,10 +3659,12 @@ void CanvasItemEditor::_draw_selection() { } // Remove non-movable nodes. - for (CanvasItem *ci : selection) { - if (!_is_node_movable(ci)) { - selection.erase(ci); + for (List::Element *E = selection.front(); E;) { + List::Element *N = E->next(); + if (!_is_node_movable(E->get())) { + selection.erase(E); } + E = N; } if (!selection.is_empty() && transform_tool && show_transformation_gizmos) { From 2a655acd5b2656535ac48c63746f7a9c39f61a78 Mon Sep 17 00:00:00 2001 From: Giganzo <158825920+Giganzo@users.noreply.github.com> Date: Thu, 6 Feb 2025 00:09:37 +0100 Subject: [PATCH 056/114] Hide EditorSpinSlider slider for Rect2i --- editor/editor_properties.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 73f6c70f342..3030fa49bdf 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1825,6 +1825,7 @@ void EditorPropertyRect2i::setup(int p_min, int p_max, const String &p_suffix) { spin[i]->set_allow_greater(true); spin[i]->set_allow_lesser(true); spin[i]->set_suffix(p_suffix); + spin[i]->set_editing_integer(true); } } From 1bc86c2626d37553294e9a3c2894b0f5828ec5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:19:19 +0200 Subject: [PATCH 057/114] Fix `PackedStringArray.to_byte_array()` to return UTF-8 encoded data instead of pointers. --- core/variant/variant_call.cpp | 14 +++++++++++++- doc/classes/PackedStringArray.xml | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp index 5f6eb8399a2..75216329740 100644 --- a/core/variant/variant_call.cpp +++ b/core/variant/variant_call.cpp @@ -1034,6 +1034,18 @@ struct _VariantCall { return len; } + static PackedByteArray func_PackedStringArray_to_byte_array(PackedStringArray *p_instance) { + PackedByteArray ret; + uint64_t size = p_instance->size(); + const String *r = p_instance->ptr(); + + for (uint64_t i = 0; i < size; i++) { + ret.append_array(r[i].to_utf8_buffer()); + ret.append(0); + } + return ret; + } + static void func_Callable_call(Variant *v, const Variant **p_args, int p_argcount, Variant &r_ret, Callable::CallError &r_error) { Callable *callable = VariantGetInternalPtr::get_ptr(v); callable->callp(p_args, p_argcount, r_ret, r_error); @@ -2577,7 +2589,7 @@ static void _register_variant_builtin_methods_array() { bind_method(PackedStringArray, has, sarray("value"), varray()); bind_method(PackedStringArray, reverse, sarray(), varray()); bind_method(PackedStringArray, slice, sarray("begin", "end"), varray(INT_MAX)); - bind_method(PackedStringArray, to_byte_array, sarray(), varray()); + bind_function(PackedStringArray, to_byte_array, _VariantCall::func_PackedStringArray_to_byte_array, sarray(), varray()); bind_method(PackedStringArray, sort, sarray(), varray()); bind_method(PackedStringArray, bsearch, sarray("value", "before"), varray(true)); bind_method(PackedStringArray, duplicate, sarray(), varray()); diff --git a/doc/classes/PackedStringArray.xml b/doc/classes/PackedStringArray.xml index 511850d6450..df8be476a51 100644 --- a/doc/classes/PackedStringArray.xml +++ b/doc/classes/PackedStringArray.xml @@ -193,7 +193,7 @@ - Returns a [PackedByteArray] with each string encoded as bytes. + Returns a [PackedByteArray] with each string encoded as UTF-8. Strings are [code]null[/code] terminated. From b2e5a5b4c1683b8be3a36fd755dc90f1f193498e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:16:46 +0200 Subject: [PATCH 058/114] Add missing `Auto (Except Pixel Fonts)` option to advanced import dialog. --- .../import/dynamic_font_import_settings.cpp | 62 +++++++++++++++++-- editor/import/dynamic_font_import_settings.h | 2 + .../import/resource_importer_dynamic_font.cpp | 45 +++++++------- 3 files changed, 84 insertions(+), 25 deletions(-) diff --git a/editor/import/dynamic_font_import_settings.cpp b/editor/import/dynamic_font_import_settings.cpp index 8dcb91e2b0b..6fd80d8403f 100644 --- a/editor/import/dynamic_font_import_settings.cpp +++ b/editor/import/dynamic_font_import_settings.cpp @@ -473,6 +473,7 @@ void DynamicFontImportSettingsDialog::_main_prop_changed(const String &p_edited_ if (font_preview.is_valid()) { if (p_edited_property == "antialiasing") { font_preview->set_antialiasing((TextServer::FontAntialiasing)import_settings_data->get("antialiasing").operator int()); + _variations_validate(); } else if (p_edited_property == "generate_mipmaps") { font_preview->set_generate_mipmaps(import_settings_data->get("generate_mipmaps")); } else if (p_edited_property == "disable_embedded_bitmaps") { @@ -492,7 +493,16 @@ void DynamicFontImportSettingsDialog::_main_prop_changed(const String &p_edited_ } else if (p_edited_property == "hinting") { font_preview->set_hinting((TextServer::Hinting)import_settings_data->get("hinting").operator int()); } else if (p_edited_property == "subpixel_positioning") { - font_preview->set_subpixel_positioning((TextServer::SubpixelPositioning)import_settings_data->get("subpixel_positioning").operator int()); + int font_subpixel_positioning = import_settings_data->get("subpixel_positioning").operator int(); + if (font_subpixel_positioning == 4 /* Auto (Except Pixel Fonts) */) { + if (is_pixel) { + font_subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_DISABLED; + } else { + font_subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_AUTO; + } + } + font_preview->set_subpixel_positioning((TextServer::SubpixelPositioning)font_subpixel_positioning); + _variations_validate(); } else if (p_edited_property == "keep_rounding_remainders") { font_preview->set_keep_rounding_remainders(import_settings_data->get("keep_rounding_remainders")); } else if (p_edited_property == "oversampling") { @@ -620,7 +630,15 @@ void DynamicFontImportSettingsDialog::_variations_validate() { if ((TextServer::FontAntialiasing)(int)import_settings_data->get("antialiasing") == TextServer::FONT_ANTIALIASING_LCD) { warn += "\n" + TTR("Note: LCD Subpixel antialiasing is selected, each of the glyphs will be pre-rendered for all supported subpixel layouts (5x)."); } - if ((TextServer::SubpixelPositioning)(int)import_settings_data->get("subpixel_positioning") != TextServer::SUBPIXEL_POSITIONING_DISABLED) { + int font_subpixel_positioning = import_settings_data->get("subpixel_positioning").operator int(); + if (font_subpixel_positioning == 4 /* Auto (Except Pixel Fonts) */) { + if (is_pixel) { + font_subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_DISABLED; + } else { + font_subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_AUTO; + } + } + if ((TextServer::SubpixelPositioning)font_subpixel_positioning != TextServer::SUBPIXEL_POSITIONING_DISABLED) { warn += "\n" + TTR("Note: Subpixel positioning is selected, each of the glyphs might be pre-rendered for multiple subpixel offsets (up to 4x)."); } if (warn.is_empty()) { @@ -1087,6 +1105,34 @@ void DynamicFontImportSettingsDialog::open_settings(const String &p_path) { font_preview.instantiate(); font_preview->set_data(font_data); + Array rids = font_preview->get_rids(); + if (!rids.is_empty()) { + PackedInt32Array glyphs = TS->font_get_supported_glyphs(rids[0]); + is_pixel = true; + for (int32_t gl : glyphs) { + Dictionary ct = TS->font_get_glyph_contours(rids[0], 16, gl); + PackedInt32Array contours = ct["contours"]; + PackedVector3Array points = ct["points"]; + int prev_start = 0; + for (int i = 0; i < contours.size(); i++) { + for (int j = prev_start; j <= contours[i]; j++) { + int next_point = (j < contours[i]) ? (j + 1) : prev_start; + if ((points[j].z != TextServer::CONTOUR_CURVE_TAG_ON) || (!Math::is_equal_approx(points[j].x, points[next_point].x) && !Math::is_equal_approx(points[j].y, points[next_point].y))) { + is_pixel = false; + break; + } + } + prev_start = contours[i] + 1; + if (!is_pixel) { + break; + } + } + if (!is_pixel) { + break; + } + } + } + String font_name = vformat("%s (%s)", font_preview->get_font_name(), font_preview->get_font_style_name()); String sample; static const String sample_base = U"12漢字ԱբΑαАбΑαאבابܐܒހށआআਆઆଆஆఆಆആආกิກິༀကႠა한글ሀᎣᐁᚁᚠᜀᜠᝀᝠកᠠᤁᥐAb😀"; @@ -1237,7 +1283,15 @@ void DynamicFontImportSettingsDialog::open_settings(const String &p_path) { font_preview->set_allow_system_fallback(import_settings_data->get("allow_system_fallback")); font_preview->set_force_autohinter(import_settings_data->get("force_autohinter")); font_preview->set_hinting((TextServer::Hinting)import_settings_data->get("hinting").operator int()); - font_preview->set_subpixel_positioning((TextServer::SubpixelPositioning)import_settings_data->get("subpixel_positioning").operator int()); + int font_subpixel_positioning = import_settings_data->get("subpixel_positioning").operator int(); + if (font_subpixel_positioning == 4 /* Auto (Except Pixel Fonts) */) { + if (is_pixel) { + font_subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_DISABLED; + } else { + font_subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_AUTO; + } + } + font_preview->set_subpixel_positioning((TextServer::SubpixelPositioning)font_subpixel_positioning); font_preview->set_keep_rounding_remainders(import_settings_data->get("keep_rounding_remainders")); font_preview->set_oversampling(import_settings_data->get("oversampling")); } @@ -1270,7 +1324,7 @@ DynamicFontImportSettingsDialog::DynamicFontImportSettingsDialog() { options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "allow_system_fallback"), true)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "force_autohinter"), false)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::INT, "hinting", PROPERTY_HINT_ENUM, "None,Light,Normal"), 1)); - options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::INT, "subpixel_positioning", PROPERTY_HINT_ENUM, "Disabled,Auto,One Half of a Pixel,One Quarter of a Pixel"), 1)); + options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::INT, "subpixel_positioning", PROPERTY_HINT_ENUM, "Disabled,Auto,One Half of a Pixel,One Quarter of a Pixel,Auto (Except Pixel Fonts)"), 4)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "keep_rounding_remainders"), true)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::FLOAT, "oversampling", PROPERTY_HINT_RANGE, "0,10,0.1"), 0.0)); diff --git a/editor/import/dynamic_font_import_settings.h b/editor/import/dynamic_font_import_settings.h index c97f4389e73..eeb860ba68d 100644 --- a/editor/import/dynamic_font_import_settings.h +++ b/editor/import/dynamic_font_import_settings.h @@ -84,6 +84,8 @@ class DynamicFontImportSettingsDialog : public ConfirmationDialog { List options_variations; List options_general; + bool is_pixel = false; + // Root layout Label *label_warn = nullptr; TabContainer *main_pages = nullptr; diff --git a/editor/import/resource_importer_dynamic_font.cpp b/editor/import/resource_importer_dynamic_font.cpp index d67d0e491e1..9e7d37d54eb 100644 --- a/editor/import/resource_importer_dynamic_font.cpp +++ b/editor/import/resource_importer_dynamic_font.cpp @@ -182,36 +182,39 @@ Error ResourceImporterDynamicFont::import(ResourceUID::ID p_source_id, const Str font->set_fallbacks(fallbacks); if (subpixel_positioning == 4 /* Auto (Except Pixel Fonts) */) { - PackedInt32Array glyphs = TS->font_get_supported_glyphs(font->get_rids()[0]); - bool is_pixel = true; - for (int32_t gl : glyphs) { - Dictionary ct = TS->font_get_glyph_contours(font->get_rids()[0], 16, gl); - PackedInt32Array contours = ct["contours"]; - PackedVector3Array points = ct["points"]; - int prev_start = 0; - for (int i = 0; i < contours.size(); i++) { - for (int j = prev_start; j <= contours[i]; j++) { - int next_point = (j < contours[i]) ? (j + 1) : prev_start; - if ((points[j].z != TextServer::CONTOUR_CURVE_TAG_ON) || (!Math::is_equal_approx(points[j].x, points[next_point].x) && !Math::is_equal_approx(points[j].y, points[next_point].y))) { - is_pixel = false; + Array rids = font->get_rids(); + if (!rids.is_empty()) { + PackedInt32Array glyphs = TS->font_get_supported_glyphs(rids[0]); + bool is_pixel = true; + for (int32_t gl : glyphs) { + Dictionary ct = TS->font_get_glyph_contours(rids[0], 16, gl); + PackedInt32Array contours = ct["contours"]; + PackedVector3Array points = ct["points"]; + int prev_start = 0; + for (int i = 0; i < contours.size(); i++) { + for (int j = prev_start; j <= contours[i]; j++) { + int next_point = (j < contours[i]) ? (j + 1) : prev_start; + if ((points[j].z != TextServer::CONTOUR_CURVE_TAG_ON) || (!Math::is_equal_approx(points[j].x, points[next_point].x) && !Math::is_equal_approx(points[j].y, points[next_point].y))) { + is_pixel = false; + break; + } + } + prev_start = contours[i] + 1; + if (!is_pixel) { break; } } - prev_start = contours[i] + 1; if (!is_pixel) { break; } } - if (!is_pixel) { - break; + if (is_pixel && !glyphs.is_empty()) { + print_line(vformat("%s: Pixel font detected, disabling subpixel positioning.", p_source_file)); + subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_DISABLED; + } else { + subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_AUTO; } } - if (is_pixel && !glyphs.is_empty()) { - print_line(vformat("%s: Pixel font detected, disabling subpixel positioning.", p_source_file)); - subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_DISABLED; - } else { - subpixel_positioning = TextServer::SUBPIXEL_POSITIONING_AUTO; - } } font->set_subpixel_positioning((TextServer::SubpixelPositioning)subpixel_positioning); font->set_keep_rounding_remainders(keep_rounding_remainders); From 779f5fb9629ec45eeb44f92c7b9040e57fa37fc6 Mon Sep 17 00:00:00 2001 From: MewPurPur Date: Wed, 15 Jan 2025 15:36:54 +0200 Subject: [PATCH 059/114] Tweak Quick Open theming --- editor/gui/editor_quick_open_dialog.cpp | 110 +++++++++++------------- editor/gui/editor_quick_open_dialog.h | 14 +-- 2 files changed, 58 insertions(+), 66 deletions(-) diff --git a/editor/gui/editor_quick_open_dialog.cpp b/editor/gui/editor_quick_open_dialog.cpp index 69903c78e6c..b8a4b675659 100644 --- a/editor/gui/editor_quick_open_dialog.cpp +++ b/editor/gui/editor_quick_open_dialog.cpp @@ -220,14 +220,15 @@ QuickOpenResultContainer::QuickOpenResultContainer() { list = memnew(VBoxContainer); list->set_h_size_flags(Control::SIZE_EXPAND_FILL); + list->add_theme_constant_override(SNAME("separation"), 0); list->hide(); scroll_container->add_child(list); grid = memnew(HFlowContainer); grid->set_h_size_flags(Control::SIZE_EXPAND_FILL); grid->set_v_size_flags(Control::SIZE_EXPAND_FILL); - grid->add_theme_constant_override("v_separation", 18); - grid->add_theme_constant_override("h_separation", 4); + grid->add_theme_constant_override(SNAME("v_separation"), 0); + grid->add_theme_constant_override(SNAME("h_separation"), 0); grid->hide(); scroll_container->add_child(grid); @@ -899,7 +900,7 @@ void QuickOpenResultItem::_notification(int p_what) { } break; case NOTIFICATION_THEME_CHANGED: { selected_stylebox = get_theme_stylebox("selected", "Tree"); - hovering_stylebox = get_theme_stylebox(SceneStringName(hover), "Tree"); + hovering_stylebox = get_theme_stylebox(SNAME("hovered"), "Tree"); highlighted_font_color = get_theme_color("font_focus_color", EditorStringName(Editor)); } break; case NOTIFICATION_DRAW: { @@ -932,43 +933,40 @@ static Vector2i _get_name_interval(const Vector2i &p_interval, int p_dir_index) QuickOpenResultListItem::QuickOpenResultListItem() { set_h_size_flags(Control::SIZE_EXPAND_FILL); - add_theme_constant_override("separation", 4 * EDSCALE); + add_theme_constant_override("margin_left", 6 * EDSCALE); + add_theme_constant_override("margin_right", 6 * EDSCALE); - { - image_container = memnew(MarginContainer); - image_container->add_theme_constant_override("margin_top", 2 * EDSCALE); - image_container->add_theme_constant_override("margin_bottom", 2 * EDSCALE); - image_container->add_theme_constant_override("margin_left", CONTAINER_MARGIN * EDSCALE); - image_container->add_theme_constant_override("margin_right", 0); - add_child(image_container); - - thumbnail = memnew(TextureRect); - thumbnail->set_h_size_flags(Control::SIZE_SHRINK_CENTER); - thumbnail->set_v_size_flags(Control::SIZE_SHRINK_CENTER); - thumbnail->set_expand_mode(TextureRect::EXPAND_IGNORE_SIZE); - thumbnail->set_stretch_mode(TextureRect::StretchMode::STRETCH_SCALE); - image_container->add_child(thumbnail); - } + hbc = memnew(HBoxContainer); + hbc->add_theme_constant_override(SNAME("separation"), 4 * EDSCALE); + add_child(hbc); - { - text_container = memnew(VBoxContainer); - text_container->add_theme_constant_override("separation", -6 * EDSCALE); - text_container->set_h_size_flags(Control::SIZE_EXPAND_FILL); - text_container->set_v_size_flags(Control::SIZE_FILL); - add_child(text_container); - - name = memnew(HighlightedLabel); - name->set_h_size_flags(Control::SIZE_EXPAND_FILL); - name->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); - name->set_horizontal_alignment(HorizontalAlignment::HORIZONTAL_ALIGNMENT_LEFT); - text_container->add_child(name); - - path = memnew(HighlightedLabel); - path->set_h_size_flags(Control::SIZE_EXPAND_FILL); - path->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); - path->add_theme_font_size_override(SceneStringName(font_size), 12 * EDSCALE); - text_container->add_child(path); - } + const int max_size = 36 * EDSCALE; + + thumbnail = memnew(TextureRect); + thumbnail->set_h_size_flags(Control::SIZE_SHRINK_CENTER); + thumbnail->set_v_size_flags(Control::SIZE_SHRINK_CENTER); + thumbnail->set_expand_mode(TextureRect::EXPAND_IGNORE_SIZE); + thumbnail->set_stretch_mode(TextureRect::STRETCH_KEEP_ASPECT_CENTERED); + thumbnail->set_custom_minimum_size(Size2i(max_size, max_size)); + hbc->add_child(thumbnail); + + text_container = memnew(VBoxContainer); + text_container->add_theme_constant_override(SNAME("separation"), -7 * EDSCALE); + text_container->set_h_size_flags(Control::SIZE_EXPAND_FILL); + text_container->set_v_size_flags(Control::SIZE_FILL); + hbc->add_child(text_container); + + name = memnew(HighlightedLabel); + name->set_h_size_flags(Control::SIZE_EXPAND_FILL); + name->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); + name->set_horizontal_alignment(HorizontalAlignment::HORIZONTAL_ALIGNMENT_LEFT); + text_container->add_child(name); + + path = memnew(HighlightedLabel); + path->set_h_size_flags(Control::SIZE_EXPAND_FILL); + path->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); + path->add_theme_font_size_override(SceneStringName(font_size), 12 * EDSCALE); + text_container->add_child(path); } void QuickOpenResultListItem::set_content(const QuickOpenResultCandidate &p_candidate, bool p_highlight) { @@ -986,21 +984,6 @@ void QuickOpenResultListItem::set_content(const QuickOpenResultCandidate &p_cand } } } - - const int max_size = 32 * EDSCALE; - bool uses_icon = p_candidate.thumbnail->get_width() < max_size; - - if (uses_icon) { - thumbnail->set_custom_minimum_size(p_candidate.thumbnail->get_size()); - - int margin_needed = (max_size - p_candidate.thumbnail->get_width()) / 2; - image_container->add_theme_constant_override("margin_left", CONTAINER_MARGIN + margin_needed); - image_container->add_theme_constant_override("margin_right", margin_needed); - } else { - thumbnail->set_custom_minimum_size(Size2i(max_size, max_size)); - image_container->add_theme_constant_override("margin_left", CONTAINER_MARGIN); - image_container->add_theme_constant_override("margin_right", 0); - } } void QuickOpenResultListItem::reset() { @@ -1030,22 +1013,31 @@ void QuickOpenResultListItem::_notification(int p_what) { //--------------- Grid Item QuickOpenResultGridItem::QuickOpenResultGridItem() { - set_h_size_flags(Control::SIZE_FILL); - set_v_size_flags(Control::SIZE_EXPAND_FILL); - add_theme_constant_override("separation", -2 * EDSCALE); + set_custom_minimum_size(Size2i(120 * EDSCALE, 0)); + add_theme_constant_override("margin_top", 6 * EDSCALE); + add_theme_constant_override("margin_left", 2 * EDSCALE); + add_theme_constant_override("margin_right", 2 * EDSCALE); + + vbc = memnew(VBoxContainer); + vbc->set_h_size_flags(Control::SIZE_FILL); + vbc->set_v_size_flags(Control::SIZE_EXPAND_FILL); + vbc->add_theme_constant_override(SNAME("separation"), 0); + add_child(vbc); + + const int max_size = 64 * EDSCALE; thumbnail = memnew(TextureRect); thumbnail->set_h_size_flags(Control::SIZE_SHRINK_CENTER); thumbnail->set_v_size_flags(Control::SIZE_SHRINK_CENTER); - thumbnail->set_custom_minimum_size(Size2i(120 * EDSCALE, 64 * EDSCALE)); - add_child(thumbnail); + thumbnail->set_custom_minimum_size(Size2i(max_size, max_size)); + vbc->add_child(thumbnail); name = memnew(HighlightedLabel); name->set_h_size_flags(Control::SIZE_EXPAND_FILL); name->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); name->set_horizontal_alignment(HorizontalAlignment::HORIZONTAL_ALIGNMENT_CENTER); name->add_theme_font_size_override(SceneStringName(font_size), 13 * EDSCALE); - add_child(name); + vbc->add_child(name); } void QuickOpenResultGridItem::set_content(const QuickOpenResultCandidate &p_candidate, bool p_highlight) { diff --git a/editor/gui/editor_quick_open_dialog.h b/editor/gui/editor_quick_open_dialog.h index a420020d05f..a5f396d734b 100644 --- a/editor/gui/editor_quick_open_dialog.h +++ b/editor/gui/editor_quick_open_dialog.h @@ -33,6 +33,7 @@ #include "core/templates/oa_hash_map.h" #include "scene/gui/dialogs.h" +#include "scene/gui/margin_container.h" class Button; class CenterContainer; @@ -176,8 +177,8 @@ class QuickOpenResultContainer : public VBoxContainer { static void _bind_methods(); }; -class QuickOpenResultGridItem : public VBoxContainer { - GDCLASS(QuickOpenResultGridItem, VBoxContainer) +class QuickOpenResultGridItem : public MarginContainer { + GDCLASS(QuickOpenResultGridItem, MarginContainer) public: QuickOpenResultGridItem(); @@ -188,12 +189,13 @@ class QuickOpenResultGridItem : public VBoxContainer { void remove_highlight(); private: + VBoxContainer *vbc = nullptr; TextureRect *thumbnail = nullptr; HighlightedLabel *name = nullptr; }; -class QuickOpenResultListItem : public HBoxContainer { - GDCLASS(QuickOpenResultListItem, HBoxContainer) +class QuickOpenResultListItem : public MarginContainer { + GDCLASS(QuickOpenResultListItem, MarginContainer) public: QuickOpenResultListItem(); @@ -207,9 +209,7 @@ class QuickOpenResultListItem : public HBoxContainer { void _notification(int p_what); private: - static const int CONTAINER_MARGIN = 8; - - MarginContainer *image_container = nullptr; + HBoxContainer *hbc = nullptr; VBoxContainer *text_container = nullptr; TextureRect *thumbnail = nullptr; From 3f56b3b23916ff54a1715cb8444304ce3c50283d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 7 Feb 2025 10:45:56 +0100 Subject: [PATCH 060/114] i18n: Sync translations with Weblate Adds Czech (cs), Persian (fa), Tamil (ta), and Vietnamese (vi) editor translations. First sync with 4.4 changes. --- doc/translations/de.po | 3257 +- doc/translations/es.po | 1907 +- doc/translations/fr.po | 4454 +- doc/translations/ga.po | 23821 +-- doc/translations/it.po | 123081 +++++++---- doc/translations/ta.po | 158882 ++++++++++++++ doc/translations/uk.po | 163007 +++++++++++++++ doc/translations/zh_CN.po | 21898 +- doc/translations/zh_TW.po | 12307 +- editor/translations/editor/ar.po | 2279 +- editor/translations/editor/bg.po | 457 +- editor/translations/editor/bn.po | 499 +- editor/translations/editor/ca.po | 479 +- editor/translations/editor/cs.po | 12766 +- editor/translations/editor/de.po | 1363 +- editor/translations/editor/el.po | 850 +- editor/translations/editor/eo.po | 642 +- editor/translations/editor/es.po | 1373 +- editor/translations/editor/es_AR.po | 557 +- editor/translations/editor/et.po | 663 +- editor/translations/editor/fa.po | 7319 +- editor/translations/editor/fi.po | 960 +- editor/translations/editor/fr.po | 1383 +- editor/translations/editor/ga.po | 1311 +- editor/translations/editor/gl.po | 321 +- editor/translations/editor/he.po | 320 +- editor/translations/editor/hu.po | 599 +- editor/translations/editor/id.po | 900 +- editor/translations/editor/it.po | 1409 +- editor/translations/editor/ja.po | 2163 +- editor/translations/editor/ka.po | 187 +- editor/translations/editor/ko.po | 2471 +- editor/translations/editor/ms.po | 279 +- editor/translations/editor/nl.po | 1182 +- editor/translations/editor/pl.po | 1325 +- editor/translations/editor/pt.po | 1934 +- editor/translations/editor/pt_BR.po | 1477 +- editor/translations/editor/ro.po | 582 +- editor/translations/editor/ru.po | 1334 +- editor/translations/editor/sk.po | 549 +- editor/translations/editor/sv.po | 13750 +- editor/translations/editor/th.po | 1161 +- editor/translations/editor/tr.po | 2236 +- editor/translations/editor/uk.po | 3268 +- editor/translations/editor/vi.po | 758 +- editor/translations/editor/zh_CN.po | 1261 +- editor/translations/editor/zh_TW.po | 1747 +- editor/translations/extractable/af.po | 10 +- editor/translations/extractable/ar.po | 12 +- editor/translations/extractable/bg.po | 12 +- editor/translations/extractable/bn.po | 10 +- editor/translations/extractable/ca.po | 12 +- editor/translations/extractable/cs.po | 12 +- editor/translations/extractable/da.po | 12 +- editor/translations/extractable/de.po | 12 +- editor/translations/extractable/el.po | 12 +- editor/translations/extractable/eo.po | 12 +- editor/translations/extractable/es.po | 12 +- editor/translations/extractable/es_AR.po | 12 +- editor/translations/extractable/et.po | 12 +- editor/translations/extractable/eu.po | 6 +- .../translations/extractable/extractable.pot | 60 +- editor/translations/extractable/fa.po | 12 +- editor/translations/extractable/fi.po | 12 +- editor/translations/extractable/fr.po | 12 +- editor/translations/extractable/gl.po | 12 +- editor/translations/extractable/he.po | 10 +- editor/translations/extractable/hi.po | 12 +- editor/translations/extractable/hu.po | 12 +- editor/translations/extractable/id.po | 12 +- editor/translations/extractable/it.po | 12 +- editor/translations/extractable/ja.po | 12 +- editor/translations/extractable/ka.po | 6 +- editor/translations/extractable/ko.po | 12 +- editor/translations/extractable/lv.po | 12 +- editor/translations/extractable/ms.po | 12 +- editor/translations/extractable/nb.po | 10 +- editor/translations/extractable/nl.po | 12 +- editor/translations/extractable/pl.po | 12 +- editor/translations/extractable/pt.po | 12 +- editor/translations/extractable/pt_BR.po | 12 +- editor/translations/extractable/ro.po | 12 +- editor/translations/extractable/ru.po | 12 +- editor/translations/extractable/sk.po | 12 +- editor/translations/extractable/sl.po | 10 +- editor/translations/extractable/sq.po | 12 +- editor/translations/extractable/sr_Cyrl.po | 10 +- editor/translations/extractable/sv.po | 12 +- editor/translations/extractable/th.po | 12 +- editor/translations/extractable/tl.po | 12 +- editor/translations/extractable/tr.po | 12 +- editor/translations/extractable/uk.po | 12 +- editor/translations/extractable/vi.po | 12 +- editor/translations/extractable/zh_CN.po | 12 +- editor/translations/extractable/zh_HK.po | 10 +- editor/translations/extractable/zh_TW.po | 12 +- editor/translations/properties/cs.po | 2832 + editor/translations/properties/de.po | 963 +- editor/translations/properties/es.po | 965 +- editor/translations/properties/et.po | 593 +- editor/translations/properties/fa.po | 3995 + editor/translations/properties/fr.po | 1472 +- editor/translations/properties/ga.po | 977 +- editor/translations/properties/id.po | 894 +- editor/translations/properties/it.po | 1530 +- editor/translations/properties/ja.po | 602 +- editor/translations/properties/ka.po | 598 +- editor/translations/properties/ko.po | 888 +- editor/translations/properties/pl.po | 764 +- editor/translations/properties/pt.po | 1312 +- editor/translations/properties/pt_BR.po | 870 +- editor/translations/properties/ru.po | 951 +- editor/translations/properties/ta.po | 10638 + editor/translations/properties/tr.po | 960 +- editor/translations/properties/uk.po | 5853 +- editor/translations/properties/vi.po | 3893 + editor/translations/properties/zh_CN.po | 967 +- editor/translations/properties/zh_TW.po | 872 +- 118 files changed, 488472 insertions(+), 142255 deletions(-) create mode 100644 doc/translations/ta.po create mode 100644 doc/translations/uk.po create mode 100644 editor/translations/properties/cs.po create mode 100644 editor/translations/properties/fa.po create mode 100644 editor/translations/properties/ta.po create mode 100644 editor/translations/properties/vi.po diff --git a/doc/translations/de.po b/doc/translations/de.po index edd16115983..73156c23018 100644 --- a/doc/translations/de.po +++ b/doc/translations/de.po @@ -74,7 +74,7 @@ # Björn Reißig , 2023. # Cerno_b , 2023. # Cerno_b , 2023, 2024. -# Janosch Lion , 2023. +# Janosch Lion , 2023, 2024. # Tobias Mohr , 2023. # Florian Schaupp , 2023. # Eric Brändli , 2024. @@ -93,13 +93,21 @@ # Random Person Games , 2024. # thereisno anderson , 2024. # Johannes Oskar Silvennoinen , 2024. +# Fabien Göhl , 2024. +# Xfox20 <136956349+Xfox20@users.noreply.github.com>, 2024. +# Nicolas Hilberg , 2024. +# Jiri-Dever , 2024. +# Michael S , 2024. +# FluLu , 2024. +# tct123 , 2024. +# Daniel Schmid , 2025. +# Michael Domanek , 2025. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2024-08-13 23:09+0000\n" -"Last-Translator: Johannes Oskar Silvennoinen \n" +"PO-Revision-Date: 2025-01-25 20:47+0000\n" +"Last-Translator: Michael Domanek \n" "Language-Team: German \n" "Language: de\n" @@ -107,7 +115,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 5.7-dev\n" +"X-Generator: Weblate 5.10-dev\n" msgid "All classes" msgstr "Alle Klassen" @@ -116,19 +124,19 @@ msgid "Globals" msgstr "Globale Klassen" msgid "Nodes" -msgstr "Nodes" +msgstr "Knoten" msgid "Resources" msgstr "Ressourcen" msgid "Editor-only" -msgstr "Editor-intern" +msgstr "nur Editor" msgid "Other objects" msgstr "Andere Objekte" msgid "Variant types" -msgstr "Variant-Typen" +msgstr "Varianten-Typen" msgid "Description" msgstr "Beschreibung" @@ -149,7 +157,7 @@ msgid "Operators" msgstr "Operatoren" msgid "Theme Properties" -msgstr "Theme-Eigenschaften" +msgstr "Themen-Eigenschaften" msgid "Signals" msgstr "Signale" @@ -164,19 +172,19 @@ msgid "Annotations" msgstr "Annotationen" msgid "Property Descriptions" -msgstr "Eigenschafts-Beschreibungen" +msgstr "Eigenschaftsbeschreibungen" msgid "Constructor Descriptions" -msgstr "Konstruktor-Beschreibungen" +msgstr "Konstruktorbeschreibungen" msgid "Method Descriptions" -msgstr "Methoden-Beschreibungen" +msgstr "Methodenbeschreibungen" msgid "Operator Descriptions" -msgstr "Operator-Beschreibungen" +msgstr "Operatorbeschreibungen" msgid "Theme Property Descriptions" -msgstr "Theme-Eigenschafts-Beschreibungen" +msgstr "Themen-Eigenschafts-Beschreibungen" msgid "Inherits:" msgstr "Erbt von:" @@ -188,7 +196,7 @@ msgid "(overrides %s)" msgstr "(überschreibt %s)" msgid "Default" -msgstr "Default" +msgstr "Standard" msgid "Setter" msgstr "Setter" @@ -215,7 +223,7 @@ msgstr "" msgid "" "This method accepts any number of arguments after the ones described here." msgstr "" -"Diese Methode akzeptiert eine beliebige Anzahl von Argumenten nach den hier " +"Diese Methode akzeptiert eine beliebige Anzahl von Argumenten nach denen hier " "beschriebenen." msgid "This method is used to construct a type." @@ -233,7 +241,7 @@ msgid "" "operand." msgstr "" "Diese Methode beschreibt einen gültigen Operator, der mit diesem Typ als " -"linker Operand zu verwenden ist." +"linker Operan zu verwenden ist." msgid "This value is an integer composed as a bitmask of the following flags." msgstr "" @@ -362,15 +370,6 @@ msgstr "" msgid "Built-in GDScript constants, functions, and annotations." msgstr "Built-in-GDScript-Konstanten, -Funktionen und -Annotationen." -msgid "" -"A list of GDScript-specific utility functions and annotations accessible from " -"any script.\n" -"For the list of the global functions and constants see [@GlobalScope]." -msgstr "" -"Eine Liste von GDScript-spezifischen Hilfsfunktionen, auf die aus jedem " -"Skript heraus zugegriffen werden kann.\n" -"Für die Liste der globalen Funktionen und Konstanten siehe [@GlobalScope]." - msgid "GDScript exports" msgstr "GDScript-Exporte" @@ -463,23 +462,6 @@ msgstr "" "können also nicht als [Callable] darauf zugreifen oder es innerhalb von " "Ausdrücken verwenden." -msgid "" -"Returns a single character (as a [String]) of the given Unicode code point " -"(which is compatible with ASCII code).\n" -"[codeblock]\n" -"a = char(65) # a is \"A\"\n" -"a = char(65 + 32) # a is \"a\"\n" -"a = char(8364) # a is \"€\"\n" -"[/codeblock]" -msgstr "" -"Gibt ein einzelnes Zeichen (als [String]) des angegebenen Unicode-Code Points " -"zurück (der mit dem ASCII-Code kompatibel ist).\n" -"[codeblock]\n" -"a = char(65) # a ist „A“\n" -"a = char(65 + 32) # a ist „a“\n" -"a = char(8364) # a ist „€“\n" -"[/codeblock]" - msgid "Use [method @GlobalScope.type_convert] instead." msgstr "Verwenden Sie stattdessen [method @GlobalScope.type_convert]." @@ -564,117 +546,6 @@ msgstr "" "[b]Hinweis:[/b] Der Aufruf dieser Funktion aus einem [Thread] wird nicht " "unterstützt. In diesem Fall wird ein leeres Array zurückgegeben." -msgid "" -"Returns the passed [param instance] converted to a Dictionary. Can be useful " -"for serializing.\n" -"[b]Note:[/b] Cannot be used to serialize objects with built-in scripts " -"attached or objects allocated within built-in scripts.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Prints out:\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" -msgstr "" -"Gibt die übergebene [param instance] zurück, konvertiert in ein Dictionary. " -"Kann für Serialisierung nützlich sein.\n" -"[b]Hinweis:[/b] Kann nicht verwendet werden, um Objekte mit Built-in-" -"Skripten, oder Objekte, die in innerhalb von Built-in-Skripten alloziert " -"werden, zu serialisieren.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Gibt aus:\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" - -msgid "" -"Returns [code]true[/code] if [param value] is an instance of [param type]. " -"The [param type] value must be one of the following:\n" -"- A constant from the [enum Variant.Type] enumeration, for example [constant " -"TYPE_INT].\n" -"- An [Object]-derived class which exists in [ClassDB], for example [Node].\n" -"- A [Script] (you can use any class, including inner one).\n" -"Unlike the right operand of the [code]is[/code] operator, [param type] can be " -"a non-constant value. The [code]is[/code] operator supports more features " -"(such as typed arrays). Use the operator instead of this method if you do not " -"need dynamic type checking.\n" -"Examples:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Note:[/b] If [param value] and/or [param type] are freed objects (see " -"[method @GlobalScope.is_instance_valid]), or [param type] is not one of the " -"above options, this method will raise a runtime error.\n" -"See also [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (and other [Array] methods)." -msgstr "" -"Gibt [code]true[/code] zurück, wenn [param value] eine Instanz von [param " -"type] ist. Der [param type]-Wert muss einer der folgenden sein:\n" -"- Eine Konstante aus dem Enum [enum Variant.Type], zum Beispiel [constant " -"TYPE_INT].\n" -"- Eine von [Object] abgeleitete Klasse, die in [ClassDB] existiert, z. B. " -"[Node].\n" -"- Ein [Script] (Sie können jede Klasse verwenden, auch eine innere).\n" -"Anders als der rechte Operand des [code]is[/code]-Operators kann [param type] " -"ein nicht-konstanter Wert sein. Der [code]is[/code]-Operator unterstützt " -"weitere Features (etwa typisierte Arrays). Verwenden Sie den Operator " -"anstelle dieser Methode, wenn Sie keine dynamische Typüberprüfung benötigen.\n" -"Beispiele:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Hinweis:[/b] Wenn [param value] und/oder [param type] freigegebene Objekte " -"sind (siehe [method @GlobalScope.is_instance_valid]), oder [param type] keine " -"der oben genannten Optionen ist, löst diese Methode einen Laufzeitfehler " -"aus.\n" -"Siehe auch [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (und andere [Array]-Methoden)." - -msgid "" -"Returns the length of the given Variant [param var]. The length can be the " -"character count of a [String] or [StringName], the element count of any array " -"type, or the size of a [Dictionary]. For every other Variant type, a run-time " -"error is generated and execution is stopped.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Returns 4\n" -"\n" -"b = \"Hello!\"\n" -"len(b) # Returns 6\n" -"[/codeblock]" -msgstr "" -"Gibt die Länge der angegebenen Variante [param var] zurück. Die Länge kann " -"die Anzahl der Zeichen eines [String] oder [StringName], die Anzahl der " -"Elemente eines beliebigen Array-Typs oder die Größe eines [Dictionary] sein. " -"Für jeden anderen Variantentyp wird ein Laufzeitfehler erzeugt und die " -"Ausführung abgebrochen.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Gibt 4 zurück\n" -"\n" -"b = \"Hallo!\"\n" -"len(b) # Gibt 6 zurück\n" -"[/codeblock]" - msgid "" "Returns a [Resource] from the filesystem located at the absolute [param " "path]. Unless it's already referenced elsewhere (such as in another script or " @@ -827,106 +698,6 @@ msgstr "" "[b]Hinweis:[/b] Der Aufruf dieser Funktion aus einem [Thread] wird nicht " "unterstützt. In diesem Fall wird stattdessen die Thread-ID ausgegeben." -msgid "" -"Returns an array with the given range. [method range] can be called in three " -"ways:\n" -"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and stops " -"[i]before[/i] [code]n[/code]. The argument [code]n[/code] is [b]exclusive[/" -"b].\n" -"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " -"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" -"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " -"respectively.\n" -"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " -"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " -"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " -"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" -"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " -"[code]0[/code], an error message is printed.\n" -"[method range] converts all arguments to [int] before processing.\n" -"[b]Note:[/b] Returns an empty array if no value meets the value constraint (e." -"g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" -"Examples:\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" -"To iterate over an [Array] backwards, use:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"for i in range(array.size() - 1, -1, -1):\n" -" print(array[i])\n" -"[/codeblock]\n" -"Output:\n" -"[codeblock lang=text]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]\n" -"To iterate over [float], convert them in the loop.\n" -"[codeblock]\n" -"for i in range (3, 0, -1):\n" -" print(i / 10.0)\n" -"[/codeblock]\n" -"Output:\n" -"[codeblock lang=text]\n" -"0.3\n" -"0.2\n" -"0.1\n" -"[/codeblock]" -msgstr "" -"Gibt ein Array mit dem angegebenen Zahlenbereich zurück. [method range] kann " -"auf drei Arten aufgerufen werden:\n" -"[code]range(n: int)[/code]: Beginnt bei 0, erhöht sich in Schritten von 1 und " -"endet [i]vor[/i] [code]n[/code]. Das Argument [code]n[/code] ist [b]exklusiv[/" -"b].\n" -"[code]range(b: int, n: int)[/code]: Beginnt bei [code]b[/code], erhöht sich " -"in Schritten von 1 und endet [i]vor[/i] [code]n[/code]. Die Argumente " -"[code]b[/code] und [code]n[/code] sind entsprechend [b]inklusive[/b] bzw. " -"[b]exklusive[/b].\n" -"[code]range(b: int, n: int, s: int)[/code]: Beginnt bei [code]b[/code], " -"erhöht/verringert sich in Schritten von [code]s[/code] und endet [i]vor[/i] " -"[code]n[/code]. Die Argumente [code]b[/code] und [code]n[/code] sind " -"entsprechend [b]inklusive[/b] bzw. [b]exklusive[/b]. Das Argument [code]s[/" -"code] [b]kann[/b] negativ sein, aber nicht [code]0[/code]. Wenn [code]s[/" -"code] gleich [code]0[/code] ist, wird eine Fehlermeldung ausgegeben.\n" -"[method range] konvertiert alle Argumente vor der Verarbeitung in [int].\n" -"[b]Hinweis:[/b] Gibt ein leeres Array zurück, wenn kein Wert die " -"Wertbeschränkung erfüllt (z. B. [code]range(2, 5, -1)[/code] oder " -"[code]range(5, 5, 1)[/code]\n" -"Beispiele:\n" -"[codeblock]\n" -"print(bereich(4)) # Gibt [0, 1, 2, 3] aus\n" -"print(bereich(2, 5)) # Gibt [2, 3, 4] aus\n" -"print(bereich(0, 6, 2)) # Gibt [0, 2, 4] aus\n" -"print(bereich(4, 1, -1)) # Gibt [4, 3, 2] aus\n" -"[/codeblock]\n" -"Um rückwärts über ein [Array] zu iterieren, verwenden Sie:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"for i in range(array.size() - 1, -1, -1):\n" -" print(array[i])\n" -"[/codeblock]\n" -"Ausgabe:\n" -"[codeblock lang=text]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]\n" -"Um über [float]-Werte zu iterieren, konvertieren Sie sie in der Schleife.\n" -"[codeblock]\n" -"for i im range(3, 0, -1):\n" -" print(i / 10.0)\n" -"[/codeblock]\n" -"Ausgabe:\n" -"[codeblock lang=text]\n" -"0.3\n" -"0.2\n" -"0.1\n" -"[/codeblock]" - msgid "" "Returns [code]true[/code] if the given [Object]-derived class exists in " "[ClassDB]. Note that [Variant] data types are not registered in [ClassDB].\n" @@ -1758,90 +1529,6 @@ msgstr "" "@export var c: int # In der Datei gespeichert, im Editor angezeigt.\n" "[/codeblock]" -msgid "" -"Define a new subgroup for the following exported properties. This helps to " -"organize properties in the Inspector dock. Subgroups work exactly like " -"groups, except they need a parent group to exist. See [annotation " -"@export_group].\n" -"See also [constant PROPERTY_USAGE_SUBGROUP].\n" -"[codeblock]\n" -"@export_group(\"Racer Properties\")\n" -"@export var nickname = \"Nick\"\n" -"@export var age = 26\n" -"\n" -"@export_subgroup(\"Car Properties\", \"car_\")\n" -"@export var car_label = \"Speedy\"\n" -"@export var car_number = 3\n" -"[/codeblock]\n" -"[b]Note:[/b] Subgroups cannot be nested, they only provide one extra level of " -"depth. Just like the next group ends the previous group, so do the subsequent " -"subgroups." -msgstr "" -"Definiert eine neue Untergruppe für die folgenden exportierten Eigenschaften. " -"Dies hilft bei der Organisation von Eigenschaften im Inspektor-Dock. " -"Untergruppen funktionieren genau wie Gruppen, mit dem Unterschied, dass sie " -"eine übergeordnete Gruppe benötigen, um zu existieren. Siehe [annotation " -"@export_group].\n" -"Siehe auch [constant PROPERTY_USAGE_SUBGROUP].\n" -"[codeblock]\n" -"@export_group(\"Racer Properties\")\n" -"@export var nickname = \"Nick\"\n" -"@export var age = 26\n" -"\n" -"@export_subgroup(\"Car Properties\", \"car_\")\n" -"@export var car_label = \"Speedy\"\n" -"@export var car_number = 3\n" -"[/codeblock]\n" -"[b]Hinweis:[/b] Untergruppen können nicht verschachtelt werden, sie bieten " -"nur eine zusätzliche Tiefenebene. Genauso wie die nächste Gruppe die " -"vorherige Gruppe beendet, tun dies auch die nachfolgenden Untergruppen." - -msgid "" -"Add a custom icon to the current script. The icon specified at [param " -"icon_path] is displayed in the Scene dock for every node of that class, as " -"well as in various editor dialogs.\n" -"[codeblock]\n" -"@icon(\"res://path/to/class/icon.svg\")\n" -"[/codeblock]\n" -"[b]Note:[/b] Only the script can have a custom icon. Inner classes are not " -"supported.\n" -"[b]Note:[/b] As annotations describe their subject, the [annotation @icon] " -"annotation must be placed before the class definition and inheritance.\n" -"[b]Note:[/b] Unlike other annotations, the argument of the [annotation @icon] " -"annotation must be a string literal (constant expressions are not supported)." -msgstr "" -"Fügt dem aktuellen Skript ein benutzerdefiniertes Icon hinzu. Das unter " -"[param icon_path] angegebene Icon wird im Szenendock für jeden Node dieser " -"Klasse sowie in verschiedenen Editor-Dialogen angezeigt.\n" -"[codeblock]\n" -"@icon(\"res://path/to/class/icon.svg\")\n" -"[/codeblock]\n" -"[b]Hinweis:[/b] Nur das Skript kann ein eigenes Icon haben. Innere Klassen " -"werden nicht unterstützt.\n" -"[b]Hinweis:[/b] Da Annotationen ihren Gegenstand beschreiben, muss die " -"Annotation [annotation @icon] vor der Klassendefinition und der Vererbung " -"platziert werden.\n" -"[b]Hinweis:[/b] Im Gegensatz zu anderen Annotationen muss das Argument der " -"Annotation [annotation @icon] ein String-Literal sein (konstante Ausdrücke " -"werden nicht unterstützt)." - -msgid "" -"Mark the following property as assigned when the [Node] is ready. Values for " -"these properties are not assigned immediately when the node is initialized " -"([method Object._init]), and instead are computed and stored right before " -"[method Node._ready].\n" -"[codeblock]\n" -"@onready var character_name: Label = $Label\n" -"[/codeblock]" -msgstr "" -"Markiert die folgende Eigenschaft als zugewiesen, wenn der [Node] bereit ist. " -"Die Werte für diese Eigenschaften werden nicht sofort bei der Initialisierung " -"des Nodes ([method Object._init]) zugewiesen, sondern erst unmittelbar vor " -"[method Node._ready] berechnet und gespeichert.\n" -"[codeblock]\n" -"@onready var character_name: Label = $Label\n" -"[/codeblock]" - msgid "" "Mark the following method for remote procedure calls. See [url=$DOCS_URL/" "tutorials/networking/high_level_multiplayer.html]High-level multiplayer[/" @@ -1970,49 +1657,9 @@ msgstr "" "muss die [annotation @tool]-Annotation vor der Klassendefinition und der " "Vererbung platziert werden." -msgid "" -"Mark the following statement to ignore the specified [param warning]. See " -"[url=$DOCS_URL/tutorials/scripting/gdscript/warning_system.html]GDScript " -"warning system[/url].\n" -"[codeblock]\n" -"func test():\n" -" print(\"hello\")\n" -" return\n" -" @warning_ignore(\"unreachable_code\")\n" -" print(\"unreachable\")\n" -"[/codeblock]" -msgstr "" -"Markiert die folgende Anweisung, um die angegebene [param warning] zu " -"ignorieren. Siehe [url=$DOCS_URL/tutorials/scripting/gdscript/warning_system." -"html]GDScript-Warnsystem[/url].\n" -"[codeblock]\n" -"func test():\n" -" print(\"Hallo\")\n" -" return\n" -" @warning_ignore(\"unreachable_code\")\n" -" print(\"Nicht erreichbar\")\n" -"[/codeblock]" - msgid "Global scope constants and functions." msgstr "Konstanten und Funktionen im globalen Scope." -msgid "" -"A list of global scope enumerated constants and built-in functions. This is " -"all that resides in the globals, constants regarding error codes, keycodes, " -"property hints, etc.\n" -"Singletons are also documented here, since they can be accessed from " -"anywhere.\n" -"For the entries related to GDScript which can be accessed in any script see " -"[@GDScript]." -msgstr "" -"Eine Liste der Enum-Konstanten und built-in-Funktionen des globalen Scopes. " -"Es handelt sich um alles, was sich in den Globals befindet, Konstanten zu " -"Fehlercodes, Keycodes, Eigenschafts-Hints usw.\n" -"Singletons werden hier ebenfalls dokumentiert, da auf sie von überall aus " -"zugegriffen werden kann.\n" -"Für die Einträge, die sich auf GDScript beziehen und auf die in jedem Skript " -"zugegriffen werden kann, siehe [@GDScript]." - msgid "Random number generation" msgstr "Zufallszahlengenerierung" @@ -2143,17 +1790,6 @@ msgstr "" "var b = acosh(-1) # Gibt 0 zurück.\n" "[/codeblock]" -msgid "" -"Returns the difference between the two angles, in the range of [code][-PI, " -"+PI][/code]. When [param from] and [param to] are opposite, returns [code]-" -"PI[/code] if [param from] is smaller than [param to], or [code]PI[/code] " -"otherwise." -msgstr "" -"Gibt die Differenz zwischen den beiden Winkeln im Bereich von [code][-PI, +PI]" -"[/code] zurück. Wenn [param from] und [param to] entgegengesetzt sind, wird " -"[code]-PI[/code] zurückgegeben, wenn [param from] kleiner ist als [param to], " -"andernfalls [code]PI[/code]." - msgid "" "Returns the arc sine of [param x] in radians. Use to get the angle of sine " "[param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/" @@ -2519,62 +2155,6 @@ msgstr "" "var r = deg_to_rad(180) # r ist 3.141593\n" "[/codeblock]" -msgid "" -"Returns an \"eased\" value of [param x] based on an easing function defined " -"with [param curve]. This easing function is based on an exponent. The [param " -"curve] can be any floating-point number, with specific values leading to the " -"following behaviors:\n" -"[codeblock lang=text]\n" -"- Lower than -1.0 (exclusive): Ease in-out\n" -"- 1.0: Linear\n" -"- Between -1.0 and 0.0 (exclusive): Ease out-in\n" -"- 0.0: Constant\n" -"- Between 0.0 to 1.0 (exclusive): Ease out\n" -"- 1.0: Linear\n" -"- Greater than 1.0 (exclusive): Ease in\n" -"[/codeblock]\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n" -"See also [method smoothstep]. If you need to perform more advanced " -"transitions, use [method Tween.interpolate_value]." -msgstr "" -"Gibt einen \"gelockerten\" Wert von [param x] zurück, der auf einer mit " -"[param curve] definierten Lockerungsfunktion basiert. Diese " -"Lockerungsfunktion basiert auf einem Exponenten. Die [param curve] kann eine " -"beliebige Fließkommazahl sein, wobei bestimmte Werte zu den folgenden " -"Verhaltensweisen führen:\n" -"[codeblock]\n" -"- Lower than -1.0 (exclusive): Ease in-out\n" -"- 1.0: Linear\n" -"- Between -1.0 and 0.0 (exclusive): Ease out-in\n" -"- 0.0: Constant\n" -"- Between 0.0 to 1.0 (exclusive): Ease out\n" -"- 1.0: Linear\n" -"- Greater than 1.0 (exclusive): Ease in\n" -"[/codeblock]\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n" -"Siehe auch [Methode smoothstep]. Wenn Sie komplexere Übergänge durchführen " -"möchten, verwenden Sie [method Tween.interpolate_value]." - -msgid "" -"Returns a human-readable name for the given [enum Error] code.\n" -"[codeblock]\n" -"print(OK) # Prints 0\n" -"print(error_string(OK)) # Prints OK\n" -"print(error_string(ERR_BUSY)) # Prints Busy\n" -"print(error_string(ERR_OUT_OF_MEMORY)) # Prints Out of memory\n" -"[/codeblock]" -msgstr "" -"Gibt einen menschenlesbaren Namen für den angegebenen [enum Error]-Code " -"zurück.\n" -"[codeblock]\n" -"print(OK) # Druckt 0\n" -"print(error_string(OK)) # Druckt OK\n" -"print(error_string(ERR_BUSY)) # Druckt Busy\n" -"print(error_string(ERR_OUT_OF_MEMORY)) # Druckt Out of memory\n" -"[/codeblock]" - msgid "" "The natural exponential function. It raises the mathematical constant [i]e[/" "i] to the power of [param x] and returns it.\n" @@ -2723,60 +2303,6 @@ msgstr "" "[/csharp]\n" "[/codeblocks]" -msgid "" -"Returns the [Object] that corresponds to [param instance_id]. All Objects " -"have a unique instance ID. See also [method Object.get_instance_id].\n" -"[codeblocks]\n" -"[gdscript]\n" -"var foo = \"bar\"\n" -"\n" -"func _ready():\n" -" var id = get_instance_id()\n" -" var inst = instance_from_id(id)\n" -" print(inst.foo) # Prints bar\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyNode : Node\n" -"{\n" -" public string Foo { get; set; } = \"bar\";\n" -"\n" -" public override void _Ready()\n" -" {\n" -" ulong id = GetInstanceId();\n" -" var inst = (MyNode)InstanceFromId(Id);\n" -" GD.Print(inst.Foo); // Prints bar\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt das [Objekt] zurück, das der [param instance_id] entspricht. Alle " -"Objekte haben eine eindeutige Instanz-ID. Siehe auch [method Object." -"get_instance_id].\n" -"[codeblocks]\n" -"[gdscript]\n" -"var foo = \"bar\"\n" -"\n" -"func _ready():\n" -" var id = get_instance_id()\n" -" var inst = instance_from_id(id)\n" -" print(inst.foo) # Druckt bar\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyNode : Node\n" -"{\n" -" public string Foo { get; set; } = \"bar\";\n" -"\n" -" public override void _Ready()\n" -" {\n" -" ulong id = GetInstanceId();\n" -" var inst = (MyNode)InstanceFromId(Id);\n" -" GD.Print(inst.Foo); // Druckt bar\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns an interpolation or extrapolation factor considering the range " "specified in [param from] and [param to], and the interpolated value " @@ -2945,47 +2471,6 @@ msgstr "" "Diese Funktion ist schneller als die Verwendung von [method is_equal_approx] " "mit einem Übergabewert von Null." -msgid "" -"Linearly interpolates between two values by the factor defined in [param " -"weight]. To perform interpolation, [param weight] should be between " -"[code]0.0[/code] and [code]1.0[/code] (inclusive). However, values outside " -"this range are allowed and can be used to perform [i]extrapolation[/i]. If " -"this is not desired, use [method clamp] on the result of this function.\n" -"Both [param from] and [param to] must be the same type. Supported types: " -"[int], [float], [Vector2], [Vector3], [Vector4], [Color], [Quaternion], " -"[Basis].\n" -"[codeblock]\n" -"lerp(0, 4, 0.75) # Returns 3.0\n" -"[/codeblock]\n" -"See also [method inverse_lerp] which performs the reverse of this operation. " -"To perform eased interpolation with [method lerp], combine it with [method " -"ease] or [method smoothstep]. See also [method remap] to map a continuous " -"series of values to another.\n" -"[b]Note:[/b] For better type safety, use [method lerpf], [method Vector2." -"lerp], [method Vector3.lerp], [method Vector4.lerp], [method Color.lerp], " -"[method Quaternion.slerp] or [method Basis.slerp]." -msgstr "" -"Interpoliert linear zwischen zwei Werten mit dem in [param weight] " -"definierten Faktor. Um eine Interpolation durchzuführen, sollte [param " -"weight] zwischen [code]0.0[/code] und [code]1.0[/code] (einschließlich) " -"liegen. Werte außerhalb dieses Bereichs sind jedoch zulässig und können für " -"eine [i]Extrapolation[/i] verwendet werden. Wenn dies nicht erwünscht ist, " -"verwenden Sie [method clamp] für das Ergebnis dieser Funktion.\n" -"Sowohl [param from] als auch [param to] müssen vom gleichen Typ sein. " -"Unterstützte Typen: [int], [float], [Vector2], [Vector3], [Vector4], [Color], " -"[Quaternion], [Basis].\n" -"[codeblock]\n" -"lerp(0, 4, 0.75) # Gibt 3.0 zurück\n" -"[/codeblock]\n" -"Siehe auch [method inverse_lerp], ignore-duplicate:die die umgekehrte " -"Operation durchführt. Um eine erleichterte Interpolation mit [method lerp] " -"durchzuführen, kombinieren Sie sie mit [method ease] oder [method " -"smoothstep]. Siehe auch [method remap], um eine kontinuierliche Reihe von " -"Werten auf eine andere abzubilden.\n" -"[b]Hinweis:[/b] Für bessere Typsicherheit verwenden Sie [method lerpf], " -"[method Vector2.lerp], [method Vector3.lerp], [method Vector4.lerp], [method " -"Color.lerp], [method Quaternion.slerp] oder [method Basis.slerp]." - msgid "" "Linearly interpolates between two angles (in radians) by a [param weight] " "value between 0.0 and 1.0.\n" @@ -3057,35 +2542,6 @@ msgstr "" "Operation durchführt. Um eine erleichterte Interpolation mit [method lerp] " "durchzuführen, kombinieren Sie sie mit [method ease] oder [method smoothstep]." -msgid "" -"Converts from linear energy to decibels (audio). This can be used to " -"implement volume sliders that behave as expected (since volume isn't " -"linear).\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"# \"Slider\" refers to a node that inherits Range such as HSlider or " -"VSlider.\n" -"# Its range must be configured to go from 0 to 1.\n" -"# Change the bus name if you'd like to change the volume of a specific bus " -"only.\n" -"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), " -"linear_to_db($Slider.value))\n" -"[/codeblock]" -msgstr "" -"Konvertiert von linearer Energie in Dezibel (Audio). Dies kann verwendet " -"werden, um Lautstärkeregler zu implementieren, die sich wie erwartet " -"verhalten (da die Lautstärke nicht linear ist).\n" -"[b]Beispiel:[/b]\n" -"[codeblock]\n" -"# \"Slider\" bezieht sich auf einen Knoten (Node), der Range wie HSlider oder " -"VSlider erbt.\n" -"# Sein Bereich muss so konfiguriert werden, dass er von 0 bis 1 reicht.\n" -"# Ändern Sie den Busnamen, wenn Sie nur die Lautstärke eines bestimmten " -"Busses ändern möchten.\n" -"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), " -"linear_to_db($Slider.value))\n" -"[/codeblock]" - msgid "" "Returns the [url=https://en.wikipedia.org/wiki/Natural_logarithm]natural " "logarithm[/url] of [param x] (base [url=https://en.wikipedia.org/wiki/" @@ -3361,128 +2817,6 @@ msgstr "" "pow(4, 1.5) # Gibt 8.0 zurück\n" "[/codeblock]" -msgid "" -"Converts one or more arguments of any type to string in the best way possible " -"and prints them to the console.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = [1, 2, 3]\n" -"print(\"a\", \"b\", a) # Prints ab[1, 2, 3]\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = new Godot.Collections.Array { 1, 2, 3 };\n" -"GD.Print(\"a\", \"b\", a); // Prints ab[1, 2, 3]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to " -"print error and warning messages instead of [method print] or [method " -"print_rich]. This distinguishes them from print messages used for debugging " -"purposes, while also displaying a stack trace when an error or warning is " -"printed." -msgstr "" -"Konvertiert ein oder mehrere Argumente eines beliebigen Typs bestmöglich in " -"eine Zeichenkette und gibt sie auf der Konsole aus.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = [1, 2, 3]\n" -"print(\"a\", \"b\", a) # Prints ab[1, 2, 3]\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = new Godot.Collections.Array { 1, 2, 3 };\n" -"GD.Print(\"a\", \"b\", a); // Prints ab[1, 2, 3]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Hinweis:[/b] Erwägen Sie die Verwendung von [method push_error] und " -"[method push_warning] zum Drucken von Fehler- und Warnmeldungen anstelle von " -"[method print] oder [method print_rich]. Dies unterscheidet sie von " -"Druckmeldungen, die zu Debugging-Zwecken verwendet werden, und zeigt " -"gleichzeitig einen Stack-Trace an, wenn ein Fehler oder eine Warnung " -"ausgegeben wird." - -msgid "" -"Converts one or more arguments of any type to string in the best way possible " -"and prints them to the console.\n" -"The following BBCode tags are supported: [code]b[/code], [code]i[/code], " -"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], " -"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/" -"code], [code]bgcolor[/code], [code]fgcolor[/code].\n" -"Color tags only support the following named colors: [code]black[/code], " -"[code]red[/code], [code]green[/code], [code]yellow[/code], [code]blue[/code], " -"[code]magenta[/code], [code]pink[/code], [code]purple[/code], [code]cyan[/" -"code], [code]white[/code], [code]orange[/code], [code]gray[/code]. " -"Hexadecimal color codes are not supported.\n" -"URL tags only support URLs wrapped by a URL tag, not URLs with a different " -"title.\n" -"When printing to standard output, the supported subset of BBCode is converted " -"to ANSI escape codes for the terminal emulator to display. Support for ANSI " -"escape codes varies across terminal emulators, especially for italic and " -"strikethrough. In standard output, [code]code[/code] is represented with " -"faint text but without any font change. Unsupported tags are left as-is in " -"standard output.\n" -"[codeblocks]\n" -"[gdscript skip-lint]\n" -"print_rich(\"[color=green][b]Hello world![/b][/color]\") # Prints out \"Hello " -"world!\" in green with a bold font\n" -"[/gdscript]\n" -"[csharp skip-lint]\n" -"GD.PrintRich(\"[color=green][b]Hello world![/b][/color]\"); // Prints out " -"\"Hello world!\" in green with a bold font\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to " -"print error and warning messages instead of [method print] or [method " -"print_rich]. This distinguishes them from print messages used for debugging " -"purposes, while also displaying a stack trace when an error or warning is " -"printed.\n" -"[b]Note:[/b] On Windows, only Windows 10 and later correctly displays ANSI " -"escape codes in standard output.\n" -"[b]Note:[/b] Output displayed in the editor supports clickable [code skip-" -"lint][url=address]text[/url][/code] tags. The [code skip-lint][url][/code] " -"tag's [code]address[/code] value is handled by [method OS.shell_open] when " -"clicked." -msgstr "" -"Konvertiert ein oder mehrere Argumente beliebigen Typs bestmöglich in einen " -"String und gibt diesen auf der Konsole aus.\n" -"Die folgenden BBCode-Tags werden unterstützt: [code]b[/code], [code]i[/code], " -"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], " -"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/" -"code], [code]bgcolor[/code], [code]fgcolor[/code].\n" -"Farb-Tags unterstützen nur die folgenden benannten Farben: [code]black[/" -"code], [code]red[/code], [code]green[/code], [code]yellow[/code], [code]blue[/" -"code], [code]magenta[/code], [code]pink[/code], [code]purple[/code], " -"[code]cyan[/code], [code]white[/code], [code]orange[/code], [code]gray[/" -"code]. Hexadezimale Farbcodes werden nicht unterstützt.\n" -"URL-Tags unterstützen nur URLs, die von einem URL-Tag umschlossen sind, nicht " -"aber URLs mit einem anderen Titel.\n" -"Beim Drucken auf die Standardausgabe wird die unterstützte Untergruppe von " -"BBCode in ANSI-Escape-Codes umgewandelt, damit der Terminalemulator sie " -"anzeigen kann. Die Unterstützung für ANSI-Escape-Codes variiert von Terminal " -"zu Terminal, insbesondere für kursiv und durchgestrichen. In der " -"Standardausgabe wird [code]code[/code] mit blassem Text, aber ohne " -"Schriftartänderung dargestellt. Nicht unterstützte Tags werden in der " -"Standardausgabe unverändert belassen.\n" -"[codeblocks]\n" -"[gdscript skip-lint]\n" -"print_rich(\"[color=green][b]Hello world![/b][/color]\") # Gibt \"Hallo Welt!" -"\" in grüner und fetter Schrift aus.\n" -"[/gdscript]\n" -"[csharp skip-lint]\n" -"GD.PrintRich(\"[color=green][b]Hello world![/b][/color]\"); // Gibt \"Hallo " -"Welt!\" in grüner und fetter Schrift aus.\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Hinweis:[/b] Erwägen Sie die Verwendung von [method push_error] und " -"[method push_warning] zum Ausgeben von Fehler- und Warnmeldungen anstelle von " -"[method print] oder [method print_rich]. Dies unterscheidet sie von " -"Meldungen, die zu Debugging-Zwecken verwendet werden, und zeigt gleichzeitig " -"einen Stack-Trace an, wenn ein Fehler oder eine Warnung ausgegeben wird.\n" -"[b]Hinweis:[/b] Unter Windows werden ANSI-Escape-Codes in der Standardausgabe " -"nur unter Windows 10 und höher korrekt angezeigt.\n" -"[b]Hinweis:[/b] Ausgaben im Editor unterstützen klickbare [code skip-lint]" -"[url=adresse]text[/url][/code]-Tags. Die [code]adresse[/code] des [code skip-" -"lint][url][/code]-Tags wird beim Klicken von [method OS.shell_open] " -"verarbeitet." - msgid "" "If verbose mode is enabled ([method OS.is_stdout_verbose] returning " "[code]true[/code]), converts one or more arguments of any type to string in " @@ -3491,179 +2825,28 @@ msgstr "" "Wenn der ausführliche Modus aktiviert ist ([Methode OS.is_stdout_verbose], " "die [code]true[/code] zurückgibt), wandelt er ein oder mehrere Argumente " "beliebigen Typs bestmöglich in Zeichenketten um und gibt sie auf der Konsole " -"aus." - -msgid "" -"Prints one or more arguments to strings in the best way possible to standard " -"error line.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printerr(\"prints to stderr\")\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintErr(\"prints to stderr\");\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt ein oder mehrere Argumente in Form von Zeichenketten so gut wie möglich " -"in der Standardfehlerzeile aus.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printerr(\"prints to stderr\")\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintErr(\"prints to stderr\");\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Prints one or more arguments to strings in the best way possible to the OS " -"terminal. Unlike [method print], no newline is automatically added at the " -"end.\n" -"[b]Note:[/b] The OS terminal is [i]not[/i] the same as the editor's Output " -"dock. The output sent to the OS terminal can be seen when running Godot from " -"a terminal. On Windows, this requires using the [code]console.exe[/code] " -"executable.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printraw(\"A\")\n" -"printraw(\"B\")\n" -"printraw(\"C\")\n" -"# Prints ABC to terminal\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintRaw(\"A\");\n" -"GD.PrintRaw(\"B\");\n" -"GD.PrintRaw(\"C\");\n" -"// Prints ABC to terminal\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt ein oder mehrere Argumente in Form von Zeichenketten in der " -"bestmöglichen Form auf dem OS-Terminal aus. Im Gegensatz zu [method print] " -"wird am Ende nicht automatisch ein Zeilenumbruch eingefügt.\n" -"[b]Hinweis:[/b] Das OS-Terminal ist [i]nicht[/i] das Ausgabe-Dock im Editor. " -"Die Ausgaben auf dem OS-Terminal können gesehen werden, wenn Godot von der " -"Kommandozeile gestartet wird. Auf Windows muss dazu die [code]console.exe[/" -"code]-Executable verwendet werden.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printraw(\"A\")\n" -"printraw(\"B\")\n" -"printraw(\"C\")\n" -"# Gibt ABC auf dem Terminal aus\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintRaw(\"A\");\n" -"GD.PrintRaw(\"B\");\n" -"GD.PrintRaw(\"C\");\n" -"// Gibt ABC auf dem Terminal aus\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Prints one or more arguments to the console with a space between each " -"argument.\n" -"[codeblocks]\n" -"[gdscript]\n" -"prints(\"A\", \"B\", \"C\") # Prints A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintS(\"A\", \"B\", \"C\"); // Prints A B C\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt ein oder mehrere Argumente auf der Konsole aus, mit einem Leerzeichen " -"zwischen den einzelnen Argumenten.\n" -"[codeblocks]\n" -"[gdscript]\n" -"prints(\"A\", \"B\", \"C\") # Gibt A B C zurück\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintS(\"A\", \"B\", \"C\"); // Gibt A B C zurück\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Prints one or more arguments to the console with a tab between each " -"argument.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printt(\"A\", \"B\", \"C\") # Prints A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintT(\"A\", \"B\", \"C\"); // Prints A B C\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt ein oder mehrere Argumente auf der Konsole aus, mit einem Tabulator " -"zwischen den einzelnen Argumenten.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printt(\"A\", \"B\", \"C\") # Gibt A B C zurück\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintT(\"A\", \"B\", \"C\"); // Gibt A B C zurück\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Pushes an error message to Godot's built-in debugger and to the OS terminal.\n" -"[codeblocks]\n" -"[gdscript]\n" -"push_error(\"test error\") # Prints \"test error\" to debugger and terminal " -"as error call\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PushError(\"test error\"); // Prints \"test error\" to debugger and " -"terminal as error call\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] This function does not pause project execution. To print an " -"error message and pause project execution in debug builds, use " -"[code]assert(false, \"test error\")[/code] instead." -msgstr "" -"Gibt eine Fehlermeldung an Godots eingebauten Debugger und an das " -"Betriebssystem-Terminal aus.\n" -"[codeblocks]\n" -"[gdscript]\n" -"push_error(\"Testfehler\") # Gibt \"Testfehler\" als Fehleraufruf an Debugger " -"und Terminal aus\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PushError(\"Testfehler\"); // Gibt \"Testfehler\" als Fehleraufruf an " -"Debugger und Terminal aus\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Hinweis:[/b] Diese Funktion hält die Projektausführung nicht an. Um eine " -"Fehlermeldung auszugeben und die Projektausführung in Debug-Builds " -"anzuhalten, verwenden Sie stattdessen [code]assert(false, \"test error\")[/" -"code]." +"aus." msgid "" -"Pushes a warning message to Godot's built-in debugger and to the OS " -"terminal.\n" +"Prints one or more arguments to strings in the best way possible to standard " +"error line.\n" "[codeblocks]\n" "[gdscript]\n" -"push_warning(\"test warning\") # Prints \"test warning\" to debugger and " -"terminal as warning call\n" +"printerr(\"prints to stderr\")\n" "[/gdscript]\n" "[csharp]\n" -"GD.PushWarning(\"test warning\"); // Prints \"test warning\" to debugger and " -"terminal as warning call\n" +"GD.PrintErr(\"prints to stderr\");\n" "[/csharp]\n" "[/codeblocks]" msgstr "" -"Gibt eine Warnmeldung an Godots eingebauten Debugger und an das " -"Betriebssystem-Terminal aus.\n" +"Gibt ein oder mehrere Argumente in Form von Zeichenketten so gut wie möglich " +"in der Standardfehlerzeile aus.\n" "[codeblocks]\n" "[gdscript]\n" -"push_warning(\"test warnung\") # Gibt \"test warnung\" als Warnaufruf an " -"Debugger und Terminal au\n" +"printerr(\"prints to stderr\")\n" "[/gdscript]\n" "[csharp]\n" -"GD.PushWarning(\"test warnung\"); // Gibt \"test warnung\" als Warnaufruf an " -"Debugger und Terminal au\n" +"GD.PrintErr(\"prints to stderr\");\n" "[/csharp]\n" "[/codeblocks]" @@ -3682,33 +2865,6 @@ msgstr "" "rad_to_deg(PI * 2) # Gibt 360 zurück\n" "[/codeblock]" -msgid "" -"Given a [param seed], returns a [PackedInt64Array] of size [code]2[/code], " -"where its first element is the randomized [int] value, and the second element " -"is the same as [param seed]. Passing the same [param seed] consistently " -"returns the same array.\n" -"[b]Note:[/b] \"Seed\" here refers to the internal state of the pseudo random " -"number generator, currently implemented as a 64 bit integer.\n" -"[codeblock]\n" -"var a = rand_from_seed(4)\n" -"\n" -"print(a[0])\t# Prints 2879024997\n" -"print(a[1])\t# Prints 4\n" -"[/codeblock]" -msgstr "" -"Gibt bei einem [param seed] ein [PackedInt64Array] der Größe [code]2[/code] " -"zurück, dessen erstes Element der zufällig ausgewählte [int]-Wert ist und " -"dessen zweites Element dem [param seed] entspricht. Die Übergabe des gleichen " -"[param seed] gibt immer das gleiche Array zurück.\n" -"[b]Hinweis:[/b] \"Seed\" bezieht sich hier auf den internen Status des Pseudo-" -"Zufallszahlengenerators, der derzeit als 64-Bit-Ganzzahl implementiert ist.\n" -"[codeblock]\n" -"var a = rand_from_seed(4)\n" -"\n" -"print(a[0])\t# Gibt 2879024997 zurück\n" -"print(a[1])\t# Gibt 4 zurück\n" -"[/codeblock]" - msgid "" "Returns a random floating-point value between [code]0.0[/code] and [code]1.0[/" "code] (inclusive).\n" @@ -4062,23 +3218,6 @@ msgstr "" "signf(NAN) # Gibt 0.0 zurück\n" "[/codeblock]" -msgid "" -"Returns [code]-1[/code] if [param x] is negative, [code]1[/code] if [param x] " -"is positive, and [code]0[/code] if if [param x] is zero.\n" -"[codeblock]\n" -"signi(-6) # Returns -1\n" -"signi(0) # Returns 0\n" -"signi(6) # Returns 1\n" -"[/codeblock]" -msgstr "" -"Gibt [code]-1[/code] zurück, wenn [param x] negativ ist, [code]1[/code], wenn " -"[param x] positiv ist, und [code]0[/code], wenn [param x] Null ist.\n" -"[codeblock]\n" -"signi(-6) # Gibt -1 zurück\n" -"signi(0) # Gibt 0 zurück\n" -"signi(6) # Gibt 1 zurück\n" -"[/codeblock]" - msgid "" "Returns the sine of angle [param angle_rad] in radians.\n" "[codeblock]\n" @@ -4105,54 +3244,6 @@ msgstr "" "sinh(a) # Gibt 0.75 zurück\n" "[/codeblock]" -msgid "" -"Returns the result of smoothly interpolating the value of [param x] between " -"[code]0[/code] and [code]1[/code], based on the where [param x] lies with " -"respect to the edges [param from] and [param to].\n" -"The return value is [code]0[/code] if [code]x <= from[/code], and [code]1[/" -"code] if [code]x >= to[/code]. If [param x] lies between [param from] and " -"[param to], the returned value follows an S-shaped curve that maps [param x] " -"between [code]0[/code] and [code]1[/code].\n" -"This S-shaped curve is the cubic Hermite interpolator, given by [code]f(y) = " -"3*y^2 - 2*y^3[/code] where [code]y = (x-from) / (to-from)[/code].\n" -"[codeblock]\n" -"smoothstep(0, 2, -5.0) # Returns 0.0\n" -"smoothstep(0, 2, 0.5) # Returns 0.15625\n" -"smoothstep(0, 2, 1.0) # Returns 0.5\n" -"smoothstep(0, 2, 2.0) # Returns 1.0\n" -"[/codeblock]\n" -"Compared to [method ease] with a curve value of [code]-1.6521[/code], [method " -"smoothstep] returns the smoothest possible curve with no sudden changes in " -"the derivative. If you need to perform more advanced transitions, use [Tween] " -"or [AnimationPlayer].\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, " -"-1.6521) return values[/url]" -msgstr "" -"Gibt das Ergebnis einer glatten Interpolation des Wertes von [param x] " -"zwischen [code]0[/code] und [code]1[/code] zurück, basierend darauf, wo " -"[param x] in Bezug auf die Kanten [param from] und [param to] liegt.\n" -"Der Rückgabewert ist [code]0[/code], wenn [code]x <= from[/code], und " -"[code]1[/code], wenn [code]x >= to[/code]. Wenn [param x] zwischen [param " -"from] und [param to] liegt, folgt der zurückgegebene Wert einer S-förmigen " -"Kurve, die [param x] zwischen [code]0[/code] und [code]1[/code] abbildet.\n" -"Diese S-Kurve ist der kubische Hermite-Interpolator, der durch [code]f(y) = " -"3*y^2 - 2*y^3[/code] gegeben ist, wobei [code]y = (x-aus) / (nach-aus)[/" -"code].\n" -"[codeblock]\n" -"smoothstep(0, 2, -5.0) # Gibt 0.0 zurück\n" -"smoothstep(0, 2, 0.5) # Gibt 0.15625 zurück\n" -"smoothstep(0, 2, 1.0) # Gibt 0.5 zurück\n" -"smoothstep(0, 2, 2.0) # Gibt 1.0 zurück\n" -"[/codeblock]\n" -"Im Vergleich zu [method ease] mit einem Kurvenwert von [code]-1.6521[/code] " -"liefert [method smoothstep] die glatteste Kurve ohne plötzliche Änderungen in " -"der Ableitung. Wenn Sie fortgeschrittenere Übergänge durchführen möchten, " -"verwenden Sie [Tween] oder [AnimationPlayer].\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"smoothstep_ease_comparison.png]Vergleich zwischen den Rückgabewerten von " -"smoothstep() und ease(x, -1.6521)[/url]" - msgid "" "Returns the multiple of [param step] that is the closest to [param x]. This " "can also be used to round a floating-point number to an arbitrary number of " @@ -4382,52 +3473,6 @@ msgstr "" "type_convert(\"Hi!\", TYPE_NIL) # Gibt null zurück\n" "[/codeblock]" -msgid "" -"Returns a human-readable name of the given [param type], using the [enum " -"Variant.Type] values.\n" -"[codeblock]\n" -"print(TYPE_INT) # Prints 2.\n" -"print(type_string(TYPE_INT)) # Prints \"int\".\n" -"print(type_string(TYPE_STRING)) # Prints \"String\".\n" -"[/codeblock]\n" -"See also [method typeof]." -msgstr "" -"Gibt einen lesbaren Namen des gegebenen [param-type] und verwendet dafür die " -"Werte aus [Variant.Type].\n" -"[codeblock]\n" -"print(TYPE_INT) # Gibt 2 aus.\n" -"print(type_string(TYPE_INT)) # Gibt einen \"int\" aus.\n" -"print(type_string(TYPE_STRING)) # Gibt einen \"String\" aus.\n" -"[/codeblock]\n" -"Siehe auch: [method typeof]." - -msgid "" -"Returns the internal type of the given [param variable], using the [enum " -"Variant.Type] values.\n" -"[codeblock]\n" -"var json = JSON.new()\n" -"json.parse('[\"a\", \"b\", \"c\"]')\n" -"var result = json.get_data()\n" -"if typeof(result) == TYPE_ARRAY:\n" -" print(result[0]) # Prints a\n" -"else:\n" -" print(\"Unexpected result\")\n" -"[/codeblock]\n" -"See also [method type_string]." -msgstr "" -"Gibt den internen Typ der angegebenen [param variable] zurück, unter " -"Verwendung der [enum Variant.Type]-Werte.\n" -"[codeblock]\n" -"var json = JSON.new()\n" -"json.parse('[\"a\", \"b\", \"c\"]')\n" -"var result = json.get_data()\n" -"if typeof(result) == TYPE_ARRAY:\n" -" print(result[0]) # Prints a\n" -"else:\n" -" print(\"Unexpected result\")\n" -"[/codeblock]\n" -"Siehe auch [method type_string]." - msgid "" "Encodes a [Variant] value to a byte array, without encoding objects. " "Deserialization can be done with [method bytes_to_var].\n" @@ -4579,25 +3624,25 @@ msgid "" "[method wrapf] is more flexible than using the [method fposmod] approach by " "giving the user control over the minimum value." msgstr "" -"Schließt den Float [param value] zwischen [param min] und [param max] ein. " -"Kann verwendet werden, um schleifenähnliches Verhalten oder unendliche " -"Oberflächen zu erzeugen.\n" +"Klemmt den Float [param Wert] zwischen [param min] und [param max] ein. Kann " +"verwendet werden, um schleifenähnliches Verhalten oder unendliche Oberflächen " +"zu erzeugen.\n" "[codeblock]\n" "# Endlosschleife zwischen 5,0 und 9,9\n" "value = wrapf(value + 0.1, 5.0, 10.0)\n" "[/codeblock]\n" "[codeblock]\n" -"# Unendliche Drehung (im Radiant)\n" +"# Unendliche Rotation (in Radiant)\n" "angle = wrapf(angle + 0.1, 0.0, TAU)\n" "[/codeblock]\n" "[codeblock]\n" -"# Unendliche Drehung (im Radiant)\n" +"# Unendliche Rotation (in Radiant)\n" "angle = wrapf(angle + 0.1, -PI, PI)\n" "[/codeblock]\n" "[b]Hinweis:[/b] Wenn [param min] den Wert [code]0[/code] hat, entspricht dies " "der [method fposmod], so dass Sie stattdessen lieber diese Methode verwenden " "sollten.\n" -"[method wrapf] ist flexibler als [method fposmod], da es dem Benutzer die " +"[method wrapf] ist flexibler als [method fposmod], da es dem Benutzer die " "Kontrolle über den Mindestwert gibt." msgid "" @@ -5271,21 +4316,9 @@ msgstr "Hyper-Taste. (Nur unter Linux/X11)." msgid "Help key." msgstr "Hilfe Taste." -msgid "" -"Media back key. Not to be confused with the Back button on an Android device." -msgstr "" -"Media back Taste. Nicht zu verwechseln mit der Zurück-Taste auf einem Android-" -"Gerät." - -msgid "Media forward key." -msgstr "Medien-Vorwärts-Taste." - msgid "Media stop key." msgstr "Medium stoppen Taste." -msgid "Media refresh key." -msgstr "Medien-Neuladen-Taste." - msgid "Volume down key." msgstr "Lautstärke-runter Taste." @@ -5394,51 +4427,6 @@ msgstr "Unbekannte Taste." msgid "Space key." msgstr "Leertaste." -msgid "! key." -msgstr "! Taste." - -msgid "\" key." -msgstr "\" Taste." - -msgid "# key." -msgstr "# Taste." - -msgid "$ key." -msgstr "$ Taste." - -msgid "% key." -msgstr "% Taste." - -msgid "& key." -msgstr "& Taste." - -msgid "' key." -msgstr "' Taste." - -msgid "( key." -msgstr "( Taste." - -msgid ") key." -msgstr ") Taste." - -msgid "* key." -msgstr "* Taste." - -msgid "+ key." -msgstr "+ Taste." - -msgid ", key." -msgstr ", Taste." - -msgid "- key." -msgstr "- Taste." - -msgid ". key." -msgstr ". Taste." - -msgid "/ key." -msgstr "/ Taste." - msgid "Number 0 key." msgstr "Nummer-0-Taste." @@ -5469,27 +4457,6 @@ msgstr "Nummer-8-Taste." msgid "Number 9 key." msgstr "Nummer-9-Taste." -msgid ": key." -msgstr ": Taste." - -msgid "; key." -msgstr "; Taste." - -msgid "< key." -msgstr "< Taste." - -msgid "= key." -msgstr "= Taste." - -msgid "> key." -msgstr "> Taste." - -msgid "? key." -msgstr "? Taste." - -msgid "@ key." -msgstr "@ Taste." - msgid "A key." msgstr "A Taste." @@ -5568,42 +4535,6 @@ msgstr "Y Taste." msgid "Z key." msgstr "Z Taste." -msgid "[ key." -msgstr "[ Taste." - -msgid "\\ key." -msgstr "\\ Taste." - -msgid "] key." -msgstr "] Taste." - -msgid "^ key." -msgstr "^ Taste." - -msgid "_ key." -msgstr "_ Taste." - -msgid "` key." -msgstr "` Taste." - -msgid "{ key." -msgstr "{ Taste." - -msgid "| key." -msgstr "| Taste." - -msgid "} key." -msgstr "} Taste." - -msgid "~ key." -msgstr "~ Taste." - -msgid "¥ key." -msgstr "¥ Taste." - -msgid "§ key." -msgstr "§ Taste." - msgid "Key Code mask." msgstr "Taste Code-Maske." @@ -6031,42 +4962,6 @@ msgstr "" "zurückzusetzen, so als ob es gerade eingeschaltet worden wäre. Sie sollte " "nicht gesendet werden, wenn das MIDI-Gerät gerade eingeschaltet wird." -msgid "" -"Methods that return [enum Error] return [constant OK] when no error " -"occurred.\n" -"Since [constant OK] has value 0, and all other error constants are positive " -"integers, it can also be used in boolean checks.\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"var error = method_that_returns_error()\n" -"if error != OK:\n" -" printerr(\"Failure!\")\n" -"\n" -"# Or, alternatively:\n" -"if error:\n" -" printerr(\"Still failing!\")\n" -"[/codeblock]\n" -"[b]Note:[/b] Many functions do not return an error code, but will print error " -"messages to standard output." -msgstr "" -"Methoden, die [enum Error] zurückgeben, geben [constant OK] zurück, wenn kein " -"Fehler aufgetreten ist.\n" -"Da die [constant OK] den Wert 0 hat und alle anderen Fehlerkonstanten " -"positive Ganzzahlen sind, kann sie auch in booleschen Prüfungen verwendet " -"werden.\n" -"[b]Beispiel:[/b]\n" -"[codeblock]\n" -"var error = method_that_returns_error()\n" -"if error != OK:\n" -" printerr(\"Fehlgeschlagen!\")\n" -"\n" -"# Oder, alternativ:\n" -"if error:\n" -" printerr(\"Immer noch fehlgeschlagen!\")\n" -"[/codeblock]\n" -"[b]Hinweis:[/b] Viele Funktionen geben keinen Fehlercode zurück, sondern " -"geben Fehlermeldungen auf der Standardausgabe aus." - msgid "Generic error." msgstr "Allgemeiner Fehler." @@ -6474,186 +5369,6 @@ msgstr "" "Objektes ist. Der Hinweisstring ist der Typ des Objektes. Wird vom Debugger " "genutzt." -msgid "" -"If a property is [String], hints that the property represents a particular " -"type (class). This allows to select a type from the create dialog. The " -"property will store the selected type as a string.\n" -"If a property is [Array], hints the editor how to show elements. The " -"[code]hint_string[/code] must encode nested types using [code]\":\"[/code] " -"and [code]\"/\"[/code].\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Array of elem_type.\n" -"hint_string = \"%d:\" % [elem_type]\n" -"hint_string = \"%d/%d:%s\" % [elem_type, elem_hint, elem_hint_string]\n" -"# Two-dimensional array of elem_type (array of arrays of elem_type).\n" -"hint_string = \"%d:%d:\" % [TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d/%d:%s\" % [TYPE_ARRAY, elem_type, elem_hint, " -"elem_hint_string]\n" -"# Three-dimensional array of elem_type (array of arrays of arrays of " -"elem_type).\n" -"hint_string = \"%d:%d:%d:\" % [TYPE_ARRAY, TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d:%d/%d:%s\" % [TYPE_ARRAY, TYPE_ARRAY, elem_type, " -"elem_hint, elem_hint_string]\n" -"[/gdscript]\n" -"[csharp]\n" -"// Array of elemType.\n" -"hintString = $\"{elemType:D}:\";\n" -"hintString = $\"{elemType:}/{elemHint:D}:{elemHintString}\";\n" -"// Two-dimensional array of elemType (array of arrays of elemType).\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}:\";\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}/{elemHint:D}:" -"{elemHintString}\";\n" -"// Three-dimensional array of elemType (array of arrays of arrays of " -"elemType).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}:" -"\";\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}/" -"{elemHint:D}:{elemHintString}\";\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Examples:\n" -"[codeblocks]\n" -"[gdscript]\n" -"hint_string = \"%d:\" % [TYPE_INT] # Array of integers.\n" -"hint_string = \"%d/%d:1,10,1\" % [TYPE_INT, PROPERTY_HINT_RANGE] # Array of " -"integers (in range from 1 to 10).\n" -"hint_string = \"%d/%d:Zero,One,Two\" % [TYPE_INT, PROPERTY_HINT_ENUM] # Array " -"of integers (an enum).\n" -"hint_string = \"%d/%d:Zero,One,Three:3,Six:6\" % [TYPE_INT, " -"PROPERTY_HINT_ENUM] # Array of integers (an enum).\n" -"hint_string = \"%d/%d:*.png\" % [TYPE_STRING, PROPERTY_HINT_FILE] # Array of " -"strings (file paths).\n" -"hint_string = \"%d/%d:Texture2D\" % [TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Array of textures.\n" -"\n" -"hint_string = \"%d:%d:\" % [TYPE_ARRAY, TYPE_FLOAT] # Two-dimensional array " -"of floats.\n" -"hint_string = \"%d:%d/%d:\" % [TYPE_ARRAY, TYPE_STRING, " -"PROPERTY_HINT_MULTILINE_TEXT] # Two-dimensional array of multiline strings.\n" -"hint_string = \"%d:%d/%d:-1,1,0.1\" % [TYPE_ARRAY, TYPE_FLOAT, " -"PROPERTY_HINT_RANGE] # Two-dimensional array of floats (in range from -1 to " -"1).\n" -"hint_string = \"%d:%d/%d:Texture2D\" % [TYPE_ARRAY, TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Two-dimensional array of textures.\n" -"[/gdscript]\n" -"[csharp]\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Range:D}:1,10,1\"; // " -"Array of integers (in range from 1 to 10).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Two\"; // " -"Array of integers (an enum).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Three:3," -"Six:6\"; // Array of integers (an enum).\n" -"hintString = $\"{Variant.Type.String:D}/{PropertyHint.File:D}:*.png\"; // " -"Array of strings (file paths).\n" -"hintString = $\"{Variant.Type.Object:D}/{PropertyHint.ResourceType:D}:" -"Texture2D\"; // Array of textures.\n" -"\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}:\"; // Two-" -"dimensional array of floats.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.String:D}/{PropertyHint." -"MultilineText:D}:\"; // Two-dimensional array of multiline strings.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}/{PropertyHint." -"Range:D}:-1,1,0.1\"; // Two-dimensional array of floats (in range from -1 to " -"1).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Object:D}/{PropertyHint." -"ResourceType:D}:Texture2D\"; // Two-dimensional array of textures.\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] The trailing colon is required for properly detecting built-in " -"types." -msgstr "" -"Wenn eine Eigenschaft [String] ist, weist dies darauf hin, dass die " -"Eigenschaft einen bestimmten Typ (Klasse) darstellt. Dies ermöglicht die " -"Auswahl eines Typs im Erstellungsdialog. Die Eigenschaft speichert den " -"ausgewählten Typ als String.\n" -"Wenn eine Eigenschaft [Array] ist, weist sie den Editor darauf hin, wie " -"Elemente angezeigt werden sollen. Der [code]hint_string[/code] muss " -"verschachtelte Typen mit [code]\":\"[/code] und [code]\"/\"[/code] kodieren.\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Array von elemType.\n" -"hint_string = \"%d:\" % [elem_type]\n" -"hint_string = \"%d/%d:%s\" % [elem_type, elem_hint, elem_hint_string]\n" -"# Zweidimensionales Array von elem_type (Array von Arrays von elem_type).\n" -"hint_string = \"%d:%d:\" % [TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d/%d:%s\" % [TYPE_ARRAY, elem_type, elem_hint, " -"elem_hint_string]\n" -"# Dreidimensionales Array von elem_type (Array von Arrays von Arrays von " -"elem_type).\n" -"hint_string = \"%d:%d:%d:\" % [TYPE_ARRAY, TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d:%d/%d:%s\" % [TYPE_ARRAY, TYPE_ARRAY, elem_type, " -"elem_hint, elem_hint_string]\n" -"[/gdscript]\n" -"[csharp]\n" -"// Array von elemType.\n" -"hintString = $\"{elemType:D}:\";\n" -"hintString = $\"{elemType:}/{elemHint:D}:{elemHintString}\";\n" -"// Zweidimensionales Array von elem_type (Array von Arrays von elem_type).\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}:\";\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}/{elemHint:D}:" -"{elemHintString}\";\n" -"// Dreidimensionales Array von elem_type (Array von Arrays von Arrays von " -"elem_type).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}:" -"\";\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}/" -"{elemHint:D}:{elemHintString}\";\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Examples:\n" -"[codeblocks]\n" -"[gdscript]\n" -"hint_string = \"%d:\" % [TYPE_INT] # Array mit ganzen Zahlen.\n" -"hint_string = \"%d/%d:1,10,1\" % [TYPE_INT, PROPERTY_HINT_RANGE] # Array von " -"Ganzzahlen (im Bereich von 1 bis 10).\n" -"hint_string = \"%d/%d:Zero,One,Two\" % [TYPE_INT, PROPERTY_HINT_ENUM] # Array " -"von Ganzzahlen (eine Aufzählung (Enum)).\n" -"hint_string = \"%d/%d:Zero,One,Three:3,Six:6\" % [TYPE_INT, " -"PROPERTY_HINT_ENUM] # Array von Ganzzahlen (eine Aufzählung (Enum)).\n" -"hint_string = \"%d/%d:*.png\" % [TYPE_STRING, PROPERTY_HINT_FILE] # Array von " -"Zeichenketten (Dateipfade).\n" -"hint_string = \"%d/%d:Texture2D\" % [TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Array von Texturen.\n" -"\n" -"hint_string = \"%d:%d:\" % [TYPE_ARRAY, TYPE_FLOAT] # Zweidimensionales Array " -"von Floats.\n" -"hint_string = \"%d:%d/%d:\" % [TYPE_ARRAY, TYPE_STRING, " -"PROPERTY_HINT_MULTILINE_TEXT] # Zweidimensionales Array von mehrzeiligen " -"Zeichenketten.\n" -"hint_string = \"%d:%d/%d:-1,1,0.1\" % [TYPE_ARRAY, TYPE_FLOAT, " -"PROPERTY_HINT_RANGE] # Zweidimensionales Array von Floats (im Bereich von -1 " -"bis 1).\n" -"hint_string = \"%d:%d/%d:Texture2D\" % [TYPE_ARRAY, TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Zweidimensionale Array von Texturen.\n" -"[/gdscript]\n" -"[csharp]\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Range:D}:1,10,1\"; // " -"Array von Ganzzahlen (im Bereich von 1 bis 10).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Two\"; // " -"Array von Ganzzahlen (eine Aufzählung (Enum)).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Three:3," -"Six:6\"; // Array von Ganzzahlen (eine Aufzählung (Enum)).\n" -"hintString = $\"{Variant.Type.String:D}/{PropertyHint.File:D}:*.png\"; // " -"Array von Zeichenketten (Dateipfade).\n" -"hintString = $\"{Variant.Type.Object:D}/{PropertyHint.ResourceType:D}:" -"Texture2D\"; // Array von Texturen.\n" -"\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}:\"; // " -"Zweidimensionales Array von Floats.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.String:D}/{PropertyHint." -"MultilineText:D}:\"; // Zweidimensionales Array von mehrzeiligen " -"Zeichenketten.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}/{PropertyHint." -"Range:D}:-1,1,0.1\"; // Zweidimensionales Array von Floats (im Bereich von -1 " -"bis 1).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Object:D}/{PropertyHint." -"ResourceType:D}:Texture2D\"; // Zweidimensionale Array von Texturen.\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Hinweis:[/b] Der abschließende Doppelpunkt ist erforderlich, um eingebaute " -"Typen korrekt zu erkennen." - msgid "This hint is not used by the engine." msgstr "Dieser Hinweis wird von der Engine nicht benutzt." @@ -6808,13 +5523,6 @@ msgstr "" "Durch Bearbeiten der Eigenschaft wird der Benutzer aufgefordert, den Editor " "neu zu starten." -msgid "" -"The property is a script variable which should be serialized and saved in the " -"scene file." -msgstr "" -"Die Eigenschaft ist eine Skriptvariable, die serialisiert und in der " -"Szenendatei gespeichert werden soll." - msgid "" "The property value of type [Object] will be stored even if its value is " "[code]null[/code]." @@ -6830,13 +5538,6 @@ msgstr "" msgid "This flag is not used by the engine." msgstr "Dieses Flag wird von der Engine nicht verwendet." -msgid "" -"The property is an enum, i.e. it only takes named integer constants from its " -"associated enumeration." -msgstr "" -"Die Eigenschaft ist ein Enum, d.h. sie nimmt nur benannte Integer Konstanten " -"aus der zugehörigen Enumeration an." - msgid "" "If property has [code]nil[/code] as default value, its type will be [Variant]." msgstr "" @@ -7213,48 +5914,6 @@ msgstr "Konstruiert einen [AABB] als Kopie des gegebenen [AABB]." msgid "Constructs an [AABB] by [param position] and [param size]." msgstr "Konstruiert ein [AABB] aus [param position] und [param size]." -msgid "" -"Returns an [AABB] equivalent to this bounding box, with its width, height, " -"and depth modified to be non-negative values.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(5, 0, 5), Vector3(-20, -10, -5))\n" -"var absolute = box.abs()\n" -"print(absolute.position) # Prints (-15, -10, 0)\n" -"print(absolute.size) # Prints (20, 10, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(5, 0, 5), new Vector3(-20, -10, -5));\n" -"var absolute = box.Abs();\n" -"GD.Print(absolute.Position); // Prints (-15, -10, 0)\n" -"GD.Print(absolute.Size); // Prints (20, 10, 5)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] It's recommended to use this method when [member size] is " -"negative, as most other methods in Godot assume that the [member size]'s " -"components are greater than [code]0[/code]." -msgstr "" -"Gibt ein [AABB]-Äquivalent zu diesem Begrenzungsrahmen zurück, dessen Breite, " -"Höhe und Tiefe so geändert wurden, dass sie nicht negative Werte sind.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(5, 0, 5), Vector3(-20, -10, -5))\n" -"var absolute = box.abs()\n" -"print(absolute.position) # Prints (-15, -10, 0)\n" -"print(absolute.size) # Prints (20, 10, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(5, 0, 5), new Vector3(-20, -10, -5));\n" -"var absolute = box.Abs();\n" -"GD.Print(absolute.Position); // Prints (-15, -10, 0)\n" -"GD.Print(absolute.Size); // Prints (20, 10, 5)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Hinweis:[/b] Es wird empfohlen, diese Methode zu verwenden, wenn die " -"[member size] negativ ist, da die meisten anderen Methoden in Godot davon " -"ausgehen, dass die Komponenten der [member size] größer als [code]0[/code] " -"sind." - msgid "" "Returns [code]true[/code] if this bounding box [i]completely[/i] encloses the " "[param with] box. The edges of both boxes are included.\n" @@ -7302,62 +5961,6 @@ msgstr "" "[/csharp]\n" "[/codeblocks]" -msgid "" -"Returns a copy of this bounding box expanded to align the edges with the " -"given [param to_point], if necessary.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(5, 2, 5))\n" -"\n" -"box = box.expand(Vector3(10, 0, 0))\n" -"print(box.position) # Prints (0, 0, 0)\n" -"print(box.size) # Prints (10, 2, 5)\n" -"\n" -"box = box.expand(Vector3(-5, 0, 5))\n" -"print(box.position) # Prints (-5, 0, 0)\n" -"print(box.size) # Prints (15, 2, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(5, 2, 5));\n" -"\n" -"box = box.Expand(new Vector3(10, 0, 0));\n" -"GD.Print(box.Position); // Prints (0, 0, 0)\n" -"GD.Print(box.Size); // Prints (10, 2, 5)\n" -"\n" -"box = box.Expand(new Vector3(-5, 0, 5));\n" -"GD.Print(box.Position); // Prints (-5, 0, 0)\n" -"GD.Print(box.Size); // Prints (15, 2, 5)\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt eine Kopie dieser Bounding Box zurück, die so erweitert wird, dass die " -"Kanten mit dem angegebenen [param to_point] ausgerichtet sind, falls " -"erforderlich.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(5, 2, 5))\n" -"\n" -"box = box.expand(Vector3(10, 0, 0))\n" -"print(box.position) # Gibt (0, 0, 0) aus\n" -"print(box.size) # Gibt (10, 2, 5) aus\n" -"\n" -"box = box.expand(Vector3(-5, 0, 5))\n" -"print(box.position) # Gibt (-5, 0, 0) aus\n" -"print(box.size) # Gibt (15, 2, 5) aus\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(5, 2, 5));\n" -"\n" -"box = box.Expand(new Vector3(10, 0, 0));\n" -"GD.Print(box.Position); // Gibt (0, 0, 0) aus\n" -"GD.Print(box.Size); // Gibt (10, 2, 5) aus\n" -"\n" -"box = box.Expand(new Vector3(-5, 0, 5));\n" -"GD.Print(box.Position); // Gibt (-5, 0, 0) aus\n" -"GD.Print(box.Size); // Gibt (15, 2, 5) aus\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns the center point of the bounding box. This is the same as " "[code]position + (size / 2.0)[/code]." @@ -7375,49 +5978,6 @@ msgstr "" "[member position] und ein [param idx] von [code]7[/code] ist dasselbe wie " "[member end]." -msgid "" -"Returns the longest normalized axis of this bounding box's [member size], as " -"a [Vector3] ([constant Vector3.RIGHT], [constant Vector3.UP], or [constant " -"Vector3.BACK]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))\n" -"\n" -"print(box.get_longest_axis()) # Prints (0, 0, 1)\n" -"print(box.get_longest_axis_index()) # Prints 2\n" -"print(box.get_longest_axis_size()) # Prints 8\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(2, 4, 8));\n" -"\n" -"GD.Print(box.GetLongestAxis()); // Prints (0, 0, 1)\n" -"GD.Print(box.GetLongestAxisIndex()); // Prints 2\n" -"GD.Print(box.GetLongestAxisSize()); // Prints 8\n" -"[/csharp]\n" -"[/codeblocks]\n" -"See also [method get_longest_axis_index] and [method get_longest_axis_size]." -msgstr "" -"Gibt die längste normalisierte Achse der [member size] dieser Bounding Box " -"zurück, entweder als [Vector3] ([constant Vector3.RIGHT], [constant Vector3." -"UP], oder als [constant Vector3.BACK]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))\n" -"\n" -"print(box.get_longest_axis()) # Gibt (0, 0, 1) aus\n" -"print(box.get_longest_axis_index()) # Gibt 2 aus\n" -"print(box.get_longest_axis_size()) # Gibt 8 aus\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(2, 4, 8));\n" -"\n" -"GD.Print(box.GetLongestAxis()); // Gibt (0, 0, 1) aus\n" -"GD.Print(box.GetLongestAxisIndex()); // Gibt 2 aus\n" -"GD.Print(box.GetLongestAxisSize()); // Gibt 8 aus\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Siehe auch [method get_longest_axis_index] und [method get_longest_axis_size]." - msgid "" "Returns the index to the longest axis of this bounding box's [member size] " "(see [constant Vector3.AXIS_X], [constant Vector3.AXIS_Y], and [constant " @@ -7470,54 +6030,6 @@ msgstr "" "Gibt das Volumen des Begrenzungsrahmens zurück. Dies entspricht [code]size.x " "* size.y * size.z[/code]. Siehe auch [method has_volume]." -msgid "" -"Returns a copy of this bounding box extended on all sides by the given amount " -"[param by]. A negative amount shrinks the box instead.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = AABB(Vector3(4, 4, 4), Vector3(8, 8, 8)).grow(4)\n" -"print(a.position) # Prints (0, 0, 0)\n" -"print(a.size) # Prints (16, 16, 16)\n" -"\n" -"var b = AABB(Vector3(0, 0, 0), Vector3(8, 4, 2)).grow(2)\n" -"print(b.position) # Prints (-2, -2, -2)\n" -"print(b.size) # Prints (12, 8, 6)\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = new Aabb(new Vector3(4, 4, 4), new Vector3(8, 8, 8)).Grow(4);\n" -"GD.Print(a.Position); // Prints (0, 0, 0)\n" -"GD.Print(a.Size); // Prints (16, 16, 16)\n" -"\n" -"var b = new Aabb(new Vector3(0, 0, 0), new Vector3(8, 4, 2)).Grow(2);\n" -"GD.Print(b.Position); // Prints (-2, -2, -2)\n" -"GD.Print(b.Size); // Prints (12, 8, 6)\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gibt eine an allen Seiten um die gegebenen Größe [param by] vergrößerte Kopie " -"dieser Bounding Box zurück. Ein negativer Wert verkleinert die Box " -"stattdessen.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = AABB(Vector3(4, 4, 4), Vector3(8, 8, 8)).grow(4)\n" -"print(a.position) # Gibt (0, 0, 0) aus\n" -"print(a.size) # Gibt (16, 16, 16) aus\n" -"\n" -"var b = AABB(Vector3(0, 0, 0), Vector3(8, 4, 2)).grow(2)\n" -"print(b.position) # Gibt (-2, -2, -2) aus\n" -"print(b.size) # Gibt (12, 8, 6) aus\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = new Aabb(new Vector3(4, 4, 4), new Vector3(8, 8, 8)).Grow(4);\n" -"GD.Print(a.Position); // Gibt (0, 0, 0) aus\n" -"GD.Print(a.Size); // Gibt (16, 16, 16) aus\n" -"\n" -"var b = new Aabb(new Vector3(0, 0, 0), new Vector3(8, 4, 2)).Grow(2);\n" -"GD.Print(b.Position); // Gibt (-2, -2, -2) aus\n" -"GD.Print(b.Size); // Gibt (12, 8, 6) aus\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns [code]true[/code] if the bounding box contains the given [param " "point]. By convention, points exactly on the right, top, and front sides are " @@ -7548,58 +6060,6 @@ msgstr "" "Gibt [code]true[/code] zurück, wenn Breite, Höhe und Tiefe dieser Bounding " "Box alle positiv sind. Siehe auch [method get_volume]." -msgid "" -"Returns the intersection between this bounding box and [param with]. If the " -"boxes do not intersect, returns an empty [AABB]. If the boxes intersect at " -"the edge, returns a flat [AABB] with no volume (see [method has_surface] and " -"[method has_volume]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box1 = AABB(Vector3(0, 0, 0), Vector3(5, 2, 8))\n" -"var box2 = AABB(Vector3(2, 0, 2), Vector3(8, 4, 4))\n" -"\n" -"var intersection = box1.intersection(box2)\n" -"print(intersection.position) # Prints (2, 0, 2)\n" -"print(intersection.size) # Prints (3, 2, 4)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box1 = new Aabb(new Vector3(0, 0, 0), new Vector3(5, 2, 8));\n" -"var box2 = new Aabb(new Vector3(2, 0, 2), new Vector3(8, 4, 4));\n" -"\n" -"var intersection = box1.Intersection(box2);\n" -"GD.Print(intersection.Position); // Prints (2, 0, 2)\n" -"GD.Print(intersection.Size); // Prints (3, 2, 4)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] If you only need to know whether two bounding boxes are " -"intersecting, use [method intersects], instead." -msgstr "" -"Gibt die Schnittmenge zwischen dieser Bounding Box und [param with] zurück. " -"Wenn diese Boxen sich nicht überschneiden, wird eine leere [AABB] " -"zurückgegeben. Wenn die Boxen sich an der Kante überschneiden, wird eine " -"flache [AABB] ohne Volumen zurückgegeben (siehe [method has_surface] und " -"[method has_volume]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box1 = AABB(Vector3(0, 0, 0), Vector3(5, 2, 8))\n" -"var box2 = AABB(Vector3(2, 0, 2), Vector3(8, 4, 4))\n" -"\n" -"var intersection = box1.intersection(box2)\n" -"print(intersection.position) # Gibt (2, 0, 2) aus\n" -"print(intersection.size) # Gibt (3, 2, 4) aus\n" -"[/gdscript]\n" -"[csharp]\n" -"var box1 = new Aabb(new Vector3(0, 0, 0), new Vector3(5, 2, 8));\n" -"var box2 = new Aabb(new Vector3(2, 0, 2), new Vector3(8, 4, 4));\n" -"\n" -"var intersection = box1.Intersection(box2);\n" -"GD.Print(intersection.Position); // Gibt (2, 0, 2) aus\n" -"GD.Print(intersection.Size); // Gibt (3, 2, 4) aus\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Hinweis:[/b] Wenn Sie nur wissen müssen, ob die zwei Bounding Boxes sich " -"überschneiden, nutzen Sie stattdessen [method intersects]." - msgid "" "Returns [code]true[/code] if this bounding box overlaps with the box [param " "with]. The edges of both boxes are [i]always[/i] excluded." @@ -7637,24 +6097,6 @@ msgstr "" "wird [code]null[/code] zurückgegeben.\n" "Das Segment beginnt bei [param from] und endet bei [param to]." -msgid "" -"Returns [code]true[/code] if this bounding box and [param aabb] are " -"approximately equal, by calling [method Vector2.is_equal_approx] on the " -"[member position] and the [member size]." -msgstr "" -"Gibt [code]true[/code] zurück, wenn dieses Begrenzungsreckteck und [param " -"aabb] annähernd gleich sind, indem [method Vector2.is_equal_approx] für " -"[member position] und [member size] aufgerufen wird." - -msgid "" -"Returns [code]true[/code] if this bounding box's values are finite, by " -"calling [method Vector2.is_finite] on the [member position] and the [member " -"size]." -msgstr "" -"Gibt [code]true[/code] zurück, wenn die Werte dieses Begrenzungsrahmens " -"endlich sind, indem [Methode Vector2.is_finite] für [member position] und " -"[member size] aufgerufen wird." - msgid "" "Returns an [AABB] that encloses both this bounding box and [param with] " "around the edges. See also [method encloses]." @@ -7662,41 +6104,6 @@ msgstr "" "Gibt ein [AABB] zurück, das sowohl diesen Begrenzungsrahmen als auch [param " "with] an den Rändern umschließt. Siehe auch [method encloses]." -msgid "" -"The ending point. This is usually the corner on the top-right and forward of " -"the bounding box, and is equivalent to [code]position + size[/code]. Setting " -"this point affects the [member size]." -msgstr "" -"Endende Ecke. Normalerweise in der vorderen, oberen rechten Ecke der Bounding " -"Box. Wird berechnet als [code]position + size[/code]. Wenn Sie diesen Wert " -"einstellen, wird die Größe ([member size]) geändert." - -msgid "" -"The origin point. This is usually the corner on the bottom-left and back of " -"the bounding box." -msgstr "" -"Der Ursprungspunkt. Dieser befindet sich normalerweise in der linken unteren " -"Ecke und im hinteren Teil der Bounding Box." - -msgid "" -"The bounding box's width, height, and depth starting from [member position]. " -"Setting this value also affects the [member end] point.\n" -"[b]Note:[/b] It's recommended setting the width, height, and depth to non-" -"negative values. This is because most methods in Godot assume that the " -"[member position] is the bottom-left-back corner, and the [member end] is the " -"top-right-forward corner. To get an equivalent bounding box with non-negative " -"size, use [method abs]." -msgstr "" -"Die Breite, Höhe und Tiefe des Begrenzungsrahmens beginnend bei [member " -"position]. Das Festlegen dieses Werts wirkt sich auch auf den Punkt [member " -"end] aus.\n" -"[b]Hinweis:[/b] Es wird empfohlen, die Breite, Höhe und Tiefe auf nicht " -"negative Werte festzulegen. Dies liegt daran, dass die meisten Methoden in " -"Godot davon ausgehen, dass die [member position] die hintere linke untere " -"Ecke und das [member end] die vordere rechte obere Ecke ist. Um einen " -"äquivalenten Begrenzungsrahmen mit nicht negativer Größe zu erhalten, " -"verwenden Sie [method abs]." - msgid "" "Returns [code]true[/code] if the [member position] or [member size] of both " "bounding boxes are not equal.\n" @@ -8312,45 +6719,13 @@ msgid "" "Plays the animation with key [param name] in reverse.\n" "This method is a shorthand for [method play] with [code]custom_speed = -1.0[/" "code] and [code]from_end = true[/code], so see its description for more " -"information." -msgstr "" -"Spielt die Animation mit der Taste [param name] in umgekehrter Reihenfolge " -"ab.\n" -"Diese Methode ist eine Abkürzung für [method play] mit [code]custom_speed = " -"-1.0[/code] und [code]from_end = true[/code], also siehe ihre Beschreibung " -"für weitere Informationen." - -msgid "" -"The setter of [member frame] resets the [member frame_progress] to [code]0.0[/" -"code] implicitly, but this method avoids that.\n" -"This is useful when you want to carry over the current [member " -"frame_progress] to another [member frame].\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Change the animation with keeping the frame index and progress.\n" -"var current_frame = animated_sprite.get_frame()\n" -"var current_progress = animated_sprite.get_frame_progress()\n" -"animated_sprite.play(\"walk_another_skin\")\n" -"animated_sprite.set_frame_and_progress(current_frame, current_progress)\n" -"[/gdscript]\n" -"[/codeblocks]" +"information." msgstr "" -"Der Setter von [member frame] setzt den [member frame_progress] implizit auf " -"[code]0.0[/code] zurück, aber diese Methode vermeidet dies.\n" -"Dies ist nützlich, wenn Sie den aktuellen [member frame_progress] auf einen " -"anderen [member frame] übertragen wollen.\n" -"[b]Beispiel:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Ändern Sie die Animation unter Beibehaltung des Frame-Index und des " -"Fortschritts.\n" -"var current_frame = animated_sprite.get_frame()\n" -"var aktuell_fortschritt = animated_sprite.get_frame_fortschritt()\n" -"animated_sprite.play(\"walk_another_skin\")\n" -"animated_sprite.set_frame_and_progress(current_frame, current_progress)\n" -"[/gdscript]\n" -"[/codeblocks]" +"Spielt die Animation mit der Taste [param name] in umgekehrter Reihenfolge " +"ab.\n" +"Diese Methode ist eine Abkürzung für [method play] mit [code]custom_speed = " +"-1.0[/code] und [code]from_end = true[/code], also siehe ihre Beschreibung " +"für weitere Informationen." msgid "" "Stops the currently playing animation. The animation position is reset to " @@ -9289,6 +7664,9 @@ msgstr "" "[Member AnimationPlayer.playback_auto_capture] und [Methode AnimationPlayer." "play_with_capture]." +msgid "At both ends of the animation, the animation will stop playing." +msgstr "Die Animation stoppt an beiden Enden." + msgid "" "At both ends of the animation, the animation will be repeated without " "changing the playback direction." @@ -9318,15 +7696,35 @@ msgstr "" "Dieses Flag zeigt an, dass die Animation den Anfang der Animation erreicht " "hat und kurz nach der Schleife verarbeitet wurde." +msgid "Finds the nearest time key." +msgstr "Findet den nächsten time key." + msgid "Finds only the key with approximating the time." msgstr "Findet nur den Schlüssel mit annähernder Zeitangabe." msgid "Finds only the key with matching the time." msgstr "Findet nur den Schlüssel, der mit der Zeit übereinstimmt." +msgid "Container for [Animation] resources." +msgstr "Container für [Animation]-Ressourcen." + +msgid "" +"An animation library stores a set of animations accessible through " +"[StringName] keys, for use with [AnimationPlayer] nodes." +msgstr "" +"Eine Animationsbibliothek speichert eine Reihe von Animationen, auf die über " +"[StringName] Tasten zugegriffen werden kann, zur Verwendung mit " +"[AnimationPlayer]-Nodes ab." + msgid "Animation tutorial index" msgstr "Animations-Tutorial-Index" +msgid "" +"Adds the [param animation] to the library, accessible by the key [param name]." +msgstr "" +"Fügt die [param animation] mit dem Schlüssel [param name] zu der Bibliothek " +"hinzu." + msgid "" "Returns the [Animation] with the key [param name]. If the animation does not " "exist, [code]null[/code] is returned and an error is logged." @@ -9335,6 +7733,9 @@ msgstr "" "Animation nicht existiert, wird [code]null[/code] zurückgegeben und ein " "Fehler protokolliert." +msgid "Returns the keys for the [Animation]s stored in the library." +msgstr "Gibt die Schlüssel für alle [Animation]en in der Bibliothek zurück." + msgid "" "Returns [code]true[/code] if the library stores an [Animation] with [param " "name] as the key." @@ -9342,6 +7743,9 @@ msgstr "" "Gibt [code]true[/code] zurück, wenn die Bibliothek eine [Animation] mit " "[param name] als Schlüssel speichert." +msgid "Removes the [Animation] with the key [param name]." +msgstr "Entfernt die [Animation] mit dem Schlüssel [param name]." + msgid "" "Changes the key of the [Animation] associated with the key [param name] to " "[param newname]." @@ -9365,6 +7769,11 @@ msgstr "" "[param name] ist der Schlüssel der Animation, die geändert wurde.\n" "Siehe auch [signal Resource.changed], für das dies als Relais fungiert." +msgid "Emitted when an [Animation] stored with the key [param name] is removed." +msgstr "" +"Wird ausgegeben, wenn eine mit dem Schlüssel [Paramname] gespeicherte " +"[Animation] entfernt wird." + msgid "" "Emitted when the key for an [Animation] is changed, from [param name] to " "[param to_name]." @@ -9372,6 +7781,10 @@ msgstr "" "Wird ausgegeben, wenn der Schlüssel für eine [Animation] von [param name] auf " "[param to_name] geändert wird." +msgid "Base class for [AnimationPlayer] and [AnimationTree]." +msgstr "" +"Basisressource für den [AnimationPlayer]- und den [AnimationTree]- Knoten." + msgid "" "Base class for [AnimationPlayer] and [AnimationTree] to manage animation " "lists. It also has general properties and methods for playback and blending.\n" @@ -9384,66 +7797,101 @@ msgstr "" "Nach der Instanziierung der Wiedergabeinformationsdaten innerhalb der " "erweiterten Klasse wird Blending durch den [AnimationMixer] verarbeitet." -msgid "Manually advance the animations by the specified time (in seconds)." +msgid "Migrating Animations from Godot 4.0 to 4.3" +msgstr "Migriere Animationen von Godot 4.0 zu 4.3" + +msgid "A virtual function for processing after getting a key during playback." msgstr "" -"Bewegt die Animationen manuell um die angegebene Zeit (in Sekunden) weiter." +"Eine virtuelle Funktion für die Verarbeitung nach dem Tastendruck während der " +"Wiedergabe." msgid "" -"Retrieve the blended value of the position tracks with the [member " -"root_motion_track] as a [Vector3] that can be used elsewhere.\n" -"This is useful in cases where you want to respect the initial key values of " -"the animation.\n" -"For example, if an animation with only one key [code]Vector3(0, 0, 0)[/code] " -"is played in the previous frame and then an animation with only one key " -"[code]Vector3(1, 0, 1)[/code] is played in the next frame, the difference can " -"be calculated as follows:\n" +"Adds [param library] to the animation player, under the key [param name].\n" +"AnimationMixer has a global library by default with an empty string as key. " +"For adding an animation to the global library:\n" "[codeblocks]\n" "[gdscript]\n" -"var prev_root_motion_position_accumulator: Vector3\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_position_accumulator: Vector3 = animation_tree." -"get_root_motion_position_accumulator()\n" -" var difference: Vector3 = current_root_motion_position_accumulator - " -"prev_root_motion_position_accumulator\n" -" prev_root_motion_position_accumulator = " -"current_root_motion_position_accumulator\n" -" transform.origin += difference\n" +"var global_library = mixer.get_animation_library(\"\")\n" +"global_library.add_animation(\"animation_name\", animation_resource)\n" "[/gdscript]\n" -"[/codeblocks]\n" -"However, if the animation loops, an unintended discrete change may occur, so " -"this is only useful for some simple use cases." +"[/codeblocks]" msgstr "" -"Ruft den gemischten Wert der Positionsspuren mit dem [member " -"root_motion_track] als [Vector3] ab, der an anderer Stelle verwendet werden " -"kann.\n" -"Dies ist in Fällen nützlich, in denen Sie die anfänglichen Schlüsselwerte der " -"Animation respektieren wollen.\n" -"Wenn z.B. eine Animation mit nur einer Taste [code]Vector3(0, 0, 0)[/code] im " -"vorherigen Frame abgespielt wird und dann eine Animation mit nur einer Taste " -"[code]Vector3(1, 0, 1)[/code] im nächsten Frame abgespielt wird, kann die " -"Differenz wie folgt berechnet werden:\n" +"Fügt [param library] zu dem Animationsspieler mit [param name] als Schlüssel " +"hinzu.\n" +"[AnimationMixer] hat standardmäßig eine globale Bibliothek mit einem leeren " +"String als Schlüssel. Um eine Animation der globalen Bibliothek " +"hinzuzufügen:\n" "[codeblocks]\n" "[gdscript]\n" -"var prev_root_motion_position_accumulator: Vector3\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_position_accumulator: Vector3 = animation_tree." -"get_root_motion_position_accumulator()\n" -" var difference: Vector3 = current_root_motion_position_accumulator - " -"prev_root_motion_position_accumulator\n" -" prev_root_motion_position_accumulator = " -"current_root_motion_position_accumulator\n" -" transform.origin += difference\n" +"var global_library = mixer.get_animation_library(\"\")\n" +"global_library.add_animation(\"animation_name\", animation_resource)\n" "[/gdscript]\n" -"[/codeblocks]\n" -"Wenn die Animation jedoch in einer Schleife läuft, kann es zu einer " -"unbeabsichtigten diskreten Änderung kommen, so dass dies nur für einige " -"einfache Anwendungsfälle sinnvoll ist." +"[/codeblocks]" + +msgid "Manually advance the animations by the specified time (in seconds)." +msgstr "" +"Bewegt die Animationen manuell um die angegebene Zeit (in Sekunden) weiter." + +msgid "" +"If the animation track specified by [param name] has an option [constant " +"Animation.UPDATE_CAPTURE], stores current values of the objects indicated by " +"the track path as a cache. If there is already a captured cache, the old " +"cache is discarded.\n" +"After this it will interpolate with current animation blending result during " +"the playback process for the time specified by [param duration], working like " +"a crossfade.\n" +"You can specify [param trans_type] as the curve for the interpolation. For " +"better results, it may be appropriate to specify [constant Tween." +"TRANS_LINEAR] for cases where the first key of the track begins with a non-" +"zero value or where the key value does not change, and [constant Tween." +"TRANS_QUAD] for cases where the key value changes linearly." +msgstr "" +"Wenn die durch [param name] angegebene Animationsspur eine Option [constant " +"Animation.UPDATE_CAPTURE] hat, werden aktuelle Werte der durch den Spurpfad " +"angegebenen Objekte als Cache gespeichert. Wenn bereits ein erfasster Cache " +"vorhanden ist, wird der alte Cache verworfen.\n" +"\n" +"Danach wird während des Wiedergabevorgangs für die durch [param duration] " +"angegebene Zeit mit dem aktuellen Ergebnis der Animationsmischung " +"interpoliert, was wie ein Crossfade funktioniert.\n" +"\n" +"Sie können [param trans_type] als Kurve für die Interpolation angeben. Für " +"bessere Ergebnisse kann es angebracht sein, [constant Tween.TRANS_LINEAR] für " +"Fälle anzugeben, in denen der erste Schlüssel der Spur mit einem Wert " +"ungleich Null beginnt oder sich der Schlüsselwert nicht ändert, und [constant " +"Tween.TRANS_QUAD] für Fälle, in denen sich der Schlüsselwert linear ändert." + +msgid "" +"[AnimationMixer] caches animated nodes. It may not notice if a node " +"disappears; [method clear_caches] forces it to update the cache again." +msgstr "" +"Der [AnimationMixer] speichert animierte Knoten im Cache. Er bemerkt " +"möglicherweise nicht, wenn ein Knoten verschwindet; [method clear_caches] " +"zwingt ihn, den Cache erneut zu aktualisieren." + +msgid "" +"Returns the key of [param animation] or an empty [StringName] if not found." +msgstr "" +"Gibt den Schlüssel von [param animation] zurück oder einen leeren " +"[StringName], wenn nicht gefunden." + +msgid "" +"Returns the key for the [AnimationLibrary] that contains [param animation] or " +"an empty [StringName] if not found." +msgstr "" +"Gibt den Schlüssel der [AnimationLibrary] welche [param animation] enthält " +"zurück oder einen leeren [StringName], wenn dieser nicht gefunden wurde." + +msgid "" +"Returns the first [AnimationLibrary] with key [param name] or [code]null[/" +"code] if not found.\n" +"To get the [AnimationMixer]'s global animation library, use " +"[code]get_animation_library(\"\")[/code]." +msgstr "" +"Gibt die erste [AnimationLibrary] mit dem Schlüssel [param name] zurück oder " +"[code]null[/code], falls nicht gefunden.\n" +"Um die globale Animationsbibliothek des [AnimationMixer] zu erhalten, " +"verwenden Sie [code]get_animation_library(\"\")[/code]." msgid "" "Retrieve the motion delta of rotation with the [member root_motion_track] as " @@ -9481,102 +7929,11 @@ msgstr "" "[/codeblocks]" msgid "" -"Retrieve the motion delta of scale with the [member root_motion_track] as a " -"[Vector3] that can be used elsewhere.\n" -"If [member root_motion_track] is not a path to a track of type [constant " -"Animation.TYPE_SCALE_3D], returns [code]Vector3(0, 0, 0)[/code].\n" -"See also [member root_motion_track] and [RootMotionView].\n" -"The most basic example is applying scale to [CharacterBody3D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var current_scale: Vector3 = Vector3(1, 1, 1)\n" -"var scale_accum: Vector3 = Vector3(1, 1, 1)\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" current_scale = get_scale()\n" -" scale_accum = Vector3(1, 1, 1)\n" -" state_machine.travel(\"Animate\")\n" -" scale_accum += animation_tree.get_root_motion_scale()\n" -" set_scale(current_scale * scale_accum)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Liefert das Bewegungsdelta von scale mit dem [member root_motion_track] als " -"[Vector3], der anderweitig verwendet werden kann.\n" -"Wenn [member root_motion_track] kein Pfad zu einer Spur vom Typ [constant " -"Animation.TYPE_SCALE_3D] ist, wird [code]Vector3(0, 0, 0)[/code] " -"zurückgegeben.\n" -"Siehe auch [member root_motion_track] und [RootMotionView].\n" -"Das einfachste Beispiel ist die Anwendung der Skalierung auf " -"[CharacterBody3D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var current_scale: Vector3 = Vector3(1, 1, 1)\n" -"var scale_accum: Vector3 = Vector3(1, 1, 1)\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" current_scale = get_scale()\n" -" scale_accum = Vector3(1, 1, 1)\n" -" state_machine.travel(\"Animate\")\n" -" scale_accum += animation_tree.get_root_motion_scale()\n" -" set_scale(current_scale * scale_accum)\n" -"[/gdscript]\n" -"[/codeblocks]" - -msgid "" -"Retrieve the blended value of the scale tracks with the [member " -"root_motion_track] as a [Vector3] that can be used elsewhere.\n" -"For example, if an animation with only one key [code]Vector3(1, 1, 1)[/code] " -"is played in the previous frame and then an animation with only one key " -"[code]Vector3(2, 2, 2)[/code] is played in the next frame, the difference can " -"be calculated as follows:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_scale_accumulator: Vector3\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_scale_accumulator: Vector3 = animation_tree." -"get_root_motion_scale_accumulator()\n" -" var difference: Vector3 = current_root_motion_scale_accumulator - " -"prev_root_motion_scale_accumulator\n" -" prev_root_motion_scale_accumulator = " -"current_root_motion_scale_accumulator\n" -" transform.basis = transform.basis.scaled(difference)\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"However, if the animation loops, an unintended discrete change may occur, so " -"this is only useful for some simple use cases." +"Returns [code]true[/code] if the [AnimationMixer] stores an [Animation] with " +"key [param name]." msgstr "" -"Holen Sie sich den gemischten Wert der Skalenspuren mit dem [member " -"root_motion_track] als [Vector3], der an anderer Stelle verwendet werden " -"kann.\n" -"Wenn zum Beispiel eine Animation mit nur einer Taste [code]Vector3(1, 1, 1)[/" -"code] im vorherigen Frame und dann eine Animation mit nur einer Taste " -"[code]Vector3(2, 2, 2)[/code] im nächsten Frame abgespielt wird, kann die " -"Differenz wie folgt berechnet werden:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_scale_accumulator: Vector3\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_scale_accumulator: Vector3 = animation_tree." -"get_root_motion_scale_accumulator()\n" -" var difference: Vector3 = current_root_motion_scale_accumulator - " -"prev_root_motion_scale_accumulator\n" -" prev_root_motion_scale_accumulator = " -"current_root_motion_scale_accumulator\n" -" transform.basis = transform.basis.scaled(difference)\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"Wenn die Animation jedoch in einer Schleife läuft, kann es zu einer " -"unbeabsichtigten diskreten Änderung kommen, so dass dies nur für einige " -"einfache Anwendungsfälle sinnvoll ist." +"Gibt [code]true[/code] zurück, wenn der [AnimationMixer] eine [Animation] mit " +"dem Schlüssel [param name] gespeichert hat." msgid "Removes the [AnimationLibrary] associated with the key [param name]." msgstr "Entfernt die [AnimationLibrary] mit der Taste [param name]." @@ -9716,9 +8073,30 @@ msgstr "" msgid "Make method calls immediately when reached in the animation." msgstr "Methodenaufrufe sofort bei Erreichen in der Animation durchführen." +msgid "" +"An [constant Animation.UPDATE_DISCRETE] track value takes precedence when " +"blending [constant Animation.UPDATE_CONTINUOUS] or [constant Animation." +"UPDATE_CAPTURE] track values and [constant Animation.UPDATE_DISCRETE] track " +"values." +msgstr "" +"Ein [constant Animation.UPDATE_DISCRETE] Spurwert hat eine höhere Priorität " +"wenn [constant Animation.UPDATE_CONTINUOUS] oder [constant Animation." +"UPDATE_CAPTURE] Spurwerte mit [constant Animation.UPDATE_DISCRETE] Spurwerten " +"gemischt werden." + msgid "Using AnimationTree" msgstr "Verwendung des AnimationTree" +msgid "" +"Currently this is mostly useless as there is a lack of many APIs to extend " +"AnimationNode by GDScript. It is planned that a more flexible API using " +"structures will be provided in the future." +msgstr "" +"Ausgehend der geringen Anzahl verfügbarer API-Schnittstellen welche die " +"AnimationNode mittels GDScript erweitern, ist die Nützlichkeit eher " +"limitiert. Es ist geplant, dass in der Zukunft flexiblere API-Schnittstellen " +"über structures bereitgestellt werden." + msgid "" "Adds an input to the animation node. This is only useful for animation nodes " "created for use in an [AnimationNodeBlendTree]. If the addition fails, " @@ -9771,9 +8149,6 @@ msgstr "" msgid "Gets the name of an input by index." msgstr "Ruft den Namen eines Eingangs nach Index ab." -msgid "Returns whether the given path is filtered." -msgstr "Gibt an, ob der angegebene Pfad gefiltert ist." - msgid "Removes an input, call this only when inactive." msgstr "Entfernt einen Eingang, rufen Sie dies nur bei Inaktivität auf." @@ -10280,13 +8655,6 @@ msgstr "" "zusätzliche Verzögerung (in Sekunden) zwischen 0 und diesem Wert zu [member " "autorestart_delay] hinzugefügt." -msgid "" -"Determines how cross-fading between animations is eased. If empty, the " -"transition will be linear." -msgstr "" -"Legt fest, wie die Überblendung zwischen Animationen abgeschwächt wird. Wenn " -"leer, wird der Übergang linear sein." - msgid "The request to play the animation connected to \"shot\" port." msgstr "" "Die Anforderung, die Animation abzuspielen, ist mit dem Anschluss \"shot\" " @@ -10309,44 +8677,6 @@ msgstr "" "Ein automatisch erstellter Knoten (Node) in einem [AnimationNodeBlendTree], " "der die endgültige Animation ausgibt." -msgid "" -"Contains multiple [AnimationRootNode]s representing animation states, " -"connected in a graph. State transitions can be configured to happen " -"automatically or via code, using a shortest-path algorithm. Retrieve the " -"[AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to " -"control it programmatically.\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\") as AnimationNodeStateMachinePlayback;\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Enthält mehrere [AnimationRootNode]s, die Animationszustände darstellen und " -"in einem Graphen verbunden sind. Die Zustandsübergänge können so konfiguriert " -"werden, dass sie automatisch oder über Code unter Verwendung eines " -"Algorithmus mit dem kürzesten Weg erfolgen. Rufen Sie das Objekt " -"[AnimationNodeStateMachinePlayback] vom [AnimationTree]-Knoten ab, um es " -"programmatisch zu steuern.\n" -"[b]Beispiel:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\") as AnimationNodeStateMachinePlayback;\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "Returns the draw offset of the graph. Used for display in the editor." msgstr "" "Gibt den Versatz des Graphen zurück. Wird zur Darstellung im Editor genutzt." @@ -10425,39 +8755,6 @@ msgstr "" "Übergängen in jedem Zustand wird als Verlassen des Zustandsautomaten " "behandelt." -msgid "" -"Allows control of [AnimationTree] state machines created with " -"[AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree." -"get(\"parameters/playback\")[/code].\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\").As();\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Ermöglicht die Kontrolle von [AnimationTree]-Zustandsmaschinen, die mit " -"[AnimationNodeStateMachine] erstellt wurden. Abrufbar mit " -"[code]$AnimationTree.get(\"parameters/playback\")[/code].\n" -"[b]Beispiel:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\").As();\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns the current state length.\n" "[b]Note:[/b] It is possible that any [AnimationRootNode] can be nodes as well " @@ -10593,17 +8890,6 @@ msgstr "" "Erstellung komplexer Zustandsautomaten durch eine direkte Schnittstelle mit " "dem Skriptcode." -msgid "" -"Determines whether the transition should disabled, enabled when using [method " -"AnimationNodeStateMachinePlayback.travel], or traversed automatically if the " -"[member advance_condition] and [member advance_expression] checks are true " -"(if assigned)." -msgstr "" -"Legt fest, ob der Übergang deaktiviert, bei Verwendung der [Methode " -"AnimationNodeStateMachinePlayback.travel] aktiviert oder automatisch " -"durchlaufen werden soll, wenn die Prüfungen [member advance_condition] und " -"[member advance_expression] wahr sind (falls zugewiesen)." - msgid "The transition type." msgstr "Der Übergangstyp." @@ -10631,14 +8917,6 @@ msgstr "" "Wartet, bis die Wiedergabe des aktuellen Zustands beendet ist, und schaltet " "dann zum Beginn der nächsten Zustandsanimation um." -msgid "" -"Automatically use this transition if the [member advance_condition] and " -"[member advance_expression] checks are true (if assigned)." -msgstr "" -"Verwenden Sie diesen Übergang automatisch, wenn die Prüfungen [member " -"advance_condition] und [member advance_expression] wahr sind (falls " -"zugewiesen)." - msgid "" "A resource to add to an [AnimationNodeBlendTree]. Blends two animations " "subtractively based on the amount value.\n" @@ -11238,44 +9516,6 @@ msgstr "" "Wird ausgegeben, wenn das empfangene [param area] diesen Bereich verlässt. " "Erfordert, dass [member monitoring] auf [code]true[/code] gesetzt ist." -msgid "" -"Emitted when a [Shape2D] of the received [param area] enters a shape of this " -"area. Requires [member monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param area_shape_index] contain indices of the " -"interacting shapes from this area and the other area, respectively. [param " -"area_rid] contains the [RID] of the other area. These values can be used with " -"the [PhysicsServer2D].\n" -"[b]Example of getting the[/b] [CollisionShape2D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Wird ausgegeben, wenn ein [Shape2D] des empfangenen [param area] in eine Form " -"dieses Bereichs eintritt. Erfordert, dass [member monitoring] auf [code]true[/" -"code] gesetzt ist.\n" -"[param local_shape_index] und [param area_shape_index] enthalten Indizes der " -"interagierenden Shapes aus diesem Bereich bzw. dem anderen Bereich. [param " -"area_rid] enthält die [RID] des anderen Bereichs. Diese Werte können mit dem " -"[PhysicsServer2D] verwendet werden.\n" -"[b]Beispiel für die Ermittlung des[/b] [CollisionShape2D] [b]Knotens aus dem " -"Formindex:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape2D] of the received [param area] exits a shape of this " "area. Requires [member monitoring] to be set to [code]true[/code].\n" @@ -11308,48 +9548,6 @@ msgstr "" "[TileMap]s werden erkannt, wenn ihr [TileSet] Kollisionsformen konfiguriert " "hat. Erfordert, dass [member monitoring] auf [code]true[/code] gesetzt ist." -msgid "" -"Emitted when a [Shape2D] of the received [param body] enters a shape of this " -"area. [param body] can be a [PhysicsBody2D] or a [TileMap]. [TileMap]s are " -"detected if their [TileSet] has collision shapes configured. Requires [member " -"monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param body_shape_index] contain indices of the " -"interacting shapes from this area and the interacting body, respectively. " -"[param body_rid] contains the [RID] of the body. These values can be used " -"with the [PhysicsServer2D].\n" -"[b]Example of getting the[/b] [CollisionShape2D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Wird ausgegeben, wenn ein [Shape2D] des empfangenen [param body] eine Form " -"dieses Bereichs betritt. Der [param body] kann ein [PhysicsBody2D] oder eine " -"[TileMap] sein. [TileMap]s werden erkannt, wenn ihr [TileSet] " -"Kollisionsformen konfiguriert hat. Erfordert, dass [member monitoring] auf " -"[code]true[/code] gesetzt ist.\n" -"[param local_shape_index] und [param body_shape_index] enthalten Indizes der " -"interagierenden Shapes aus diesem Bereich bzw. dem interagierenden Körper. " -"[param body_rid] enthält die [RID] des Körpers. Diese Werte können mit dem " -"[PhysicsServer2D] verwendet werden.\n" -"[b]Beispiel für die Ermittlung des[/b] [CollisionShape2D] [b]Knotens aus dem " -"Formindex:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape2D] of the received [param body] exits a shape of this " "area. [param body] can be a [PhysicsBody2D] or a [TileMap]. [TileMap]s are " @@ -11575,44 +9773,6 @@ msgstr "" "[b]Hinweis:[/b] Diese Windkraft wird nur auf [SoftBody3D]-Nodes angewendet. " "Andere Physik-Bodys werden aktuell nicht vom Wind beeinflusst." -msgid "" -"Emitted when a [Shape3D] of the received [param area] enters a shape of this " -"area. Requires [member monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param area_shape_index] contain indices of the " -"interacting shapes from this area and the other area, respectively. [param " -"area_rid] contains the [RID] of the other area. These values can be used with " -"the [PhysicsServer3D].\n" -"[b]Example of getting the[/b] [CollisionShape3D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Wird ausgegeben, wenn ein [Shape3D] des empfangenen [param area] in eine Form " -"dieses Bereichs eintritt. Erfordert, dass [member monitoring] auf [code]true[/" -"code] gesetzt ist.\n" -"[param local_shape_index] und [param area_shape_index] enthalten Indizes der " -"interagierenden Shapes aus diesem Bereich bzw. dem anderen Bereich. [param " -"area_rid] enthält die [RID] des anderen Bereichs. Diese Werte können mit dem " -"[PhysicsServer3D] verwendet werden.\n" -"[b]Beispiel für die Ermittlung des[/b] [CollisionShape3D] [b]Knotens aus dem " -"Formindex:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape3D] of the received [param area] exits a shape of this " "area. Requires [member monitoring] to be set to [code]true[/code].\n" @@ -11647,48 +9807,6 @@ msgstr "" "konfiguriert hat. Erfordert, dass [member monitoring] auf [code]true[/code] " "gesetzt ist." -msgid "" -"Emitted when a [Shape3D] of the received [param body] enters a shape of this " -"area. [param body] can be a [PhysicsBody3D] or a [GridMap]. [GridMap]s are " -"detected if their [MeshLibrary] has collision shapes configured. Requires " -"[member monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param body_shape_index] contain indices of the " -"interacting shapes from this area and the interacting body, respectively. " -"[param body_rid] contains the [RID] of the body. These values can be used " -"with the [PhysicsServer3D].\n" -"[b]Example of getting the[/b] [CollisionShape3D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Wird ausgegeben, wenn ein [Shape3D] des empfangenen [param body] eine Form " -"dieses Bereichs betritt. Der [param body] kann ein [PhysicsBody3D] oder eine " -"[GridMap] sein. [GridMap]s werden erkannt, wenn ihre [MeshLibrary] " -"Kollisionsformen konfiguriert hat. Erfordert, dass [member monitoring] auf " -"[code]true[/code] gesetzt ist.\n" -"[param local_shape_index] und [param body_shape_index] enthalten Indizes der " -"interagierenden Shapes aus diesem Bereich bzw. dem interagierenden Körper. " -"[param body_rid] enthält die [RID] des Körpers. Diese Werte können mit dem " -"[PhysicsServer3D] verwendet werden.\n" -"[b]Beispiel für die Ermittlung des[/b] [CollisionShape3D] [b]Knotens aus dem " -"Formindex:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape3D] of the received [param body] exits a shape of this " "area. [param body] can be a [PhysicsBody3D] or a [GridMap]. [GridMap]s are " @@ -11742,120 +9860,19 @@ msgstr "" "Arrays so, dass es mit [param array] übereinstimmt. Führt Typkonvertierungen " "durch, wenn das Array typisiert ist." -msgid "Returns the number of times an element is in the array." -msgstr "Gibt die Anzahl der Vorkommen eines Elements im Array zurück." - msgid "" "Compares the left operand [Array] against the [param right] [Array]. Returns " "[code]true[/code] if the sizes and contents of the arrays are equal, " "[code]false[/code] otherwise." -msgstr "" -"Vergleicht den linken Operanden [Array] mit dem [param right] [Array]. Gibt " -"[code]true[/code] zurück, wenn die Größen und Inhalte der Arrays gleich sind, " -"andernfalls [code]false[/code]." - -msgid "" -"[Mesh] type that provides utility for constructing a surface from arrays." -msgstr "" -"[Mesh]-Typ, der das Konstruieren einer Oberfläche aus Arrays ermöglicht." - -msgid "" -"The [ArrayMesh] is used to construct a [Mesh] by specifying the attributes as " -"arrays.\n" -"The most basic example is the creation of a single triangle:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var vertices = PackedVector3Array()\n" -"vertices.push_back(Vector3(0, 1, 0))\n" -"vertices.push_back(Vector3(1, 0, 0))\n" -"vertices.push_back(Vector3(0, 0, 1))\n" -"\n" -"# Initialize the ArrayMesh.\n" -"var arr_mesh = ArrayMesh.new()\n" -"var arrays = []\n" -"arrays.resize(Mesh.ARRAY_MAX)\n" -"arrays[Mesh.ARRAY_VERTEX] = vertices\n" -"\n" -"# Create the Mesh.\n" -"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n" -"var m = MeshInstance3D.new()\n" -"m.mesh = arr_mesh\n" -"[/gdscript]\n" -"[csharp]\n" -"var vertices = new Vector3[]\n" -"{\n" -" new Vector3(0, 1, 0),\n" -" new Vector3(1, 0, 0),\n" -" new Vector3(0, 0, 1),\n" -"};\n" -"\n" -"// Initialize the ArrayMesh.\n" -"var arrMesh = new ArrayMesh();\n" -"var arrays = new Godot.Collections.Array();\n" -"arrays.Resize((int)Mesh.ArrayType.Max);\n" -"arrays[(int)Mesh.ArrayType.Vertex] = vertices;\n" -"\n" -"// Create the Mesh.\n" -"arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);\n" -"var m = new MeshInstance3D();\n" -"m.Mesh = arrMesh;\n" -"[/csharp]\n" -"[/codeblocks]\n" -"The [MeshInstance3D] is ready to be added to the [SceneTree] to be shown.\n" -"See also [ImmediateMesh], [MeshDataTool] and [SurfaceTool] for procedural " -"geometry generation.\n" -"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-" -"OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive " -"modes." -msgstr "" -"Das [ArrayMesh] wird verwendet, um ein [Mesh] zu konstruieren, indem die " -"Attribute als Arrays angegeben werden.\n" -"Das einfachste Beispiel ist die Erstellung eines einzelnen Dreiecks:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var vertices = PackedVector3Array()\n" -"vertices.push_back(Vector3(0, 1, 0))\n" -"vertices.push_back(Vector3(1, 0, 0))\n" -"vertices.push_back(Vector3(0, 0, 1))\n" -"\n" -"# Initialisiert das ArrayMesh.\n" -"var arr_mesh = ArrayMesh.new()\n" -"var arrays = []\n" -"arrays.resize(Mesh.ARRAY_MAX)\n" -"arrays[Mesh.ARRAY_VERTEX] = vertices\n" -"\n" -"# Erstellt das Mesh.\n" -"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n" -"var m = MeshInstance3D.new()\n" -"m.mesh = arr_mesh\n" -"[/gdscript]\n" -"[csharp]\n" -"var vertices = new Vector3[]\n" -"{\n" -" new Vector3(0, 1, 0),\n" -" new Vector3(1, 0, 0),\n" -" new Vector3(0, 0, 1),\n" -"};\n" -"\n" -"// Initialisiert das ArrayMesh.\n" -"var arrMesh = new ArrayMesh();\n" -"var arrays = new Godot.Collections.Array();\n" -"arrays.Resize((int)Mesh.ArrayType.Max);\n" -"arrays[(int)Mesh.ArrayType.Vertex] = vertices;\n" -"\n" -"// Erstellt das Mesh.\n" -"arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);\n" -"var m = new MeshInstance3D();\n" -"m.Mesh = arrMesh;\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Die [MeshInstance3D] ist bereit, dem darzustellenden [SceneTree] hinzugefügt " -"zu werden.\n" -"Siehe auch [ImmediateMesh], [MeshDataTool] und [SurfaceTool] für prozedurale " -"Geometrieerzeugung.\n" -"[b]Hinweis:[/b] Godot verwendet die [url=https://learnopengl.com/Advanced-" -"OpenGL/Face-culling]Wicklungsrichtung[/url] im Uhrzeigersinn für Vorderseiten " -"von Dreiecks-Primitivmodi." +msgstr "" +"Vergleicht den linken Operanden [Array] mit dem [param right] [Array]. Gibt " +"[code]true[/code] zurück, wenn die Größen und Inhalte der Arrays gleich sind, " +"andernfalls [code]false[/code]." + +msgid "" +"[Mesh] type that provides utility for constructing a surface from arrays." +msgstr "" +"[Mesh]-Typ, der das Konstruieren einer Oberfläche aus Arrays ermöglicht." msgid "Procedural geometry using the ArrayMesh" msgstr "Prozedurale Geometrie unter Verwendung des ArrayMesh" @@ -12244,121 +10261,6 @@ msgstr "" "Deaktiviert oder aktiviert den angegebenen Punkt für die Pfadfindung. " "Nützlich für die Erstellung eines temporären Hindernisses." -msgid "" -"A* (A star) is a computer algorithm used in pathfinding and graph traversal, " -"the process of plotting short paths among vertices (points), passing through " -"a given set of edges (segments). It enjoys widespread use due to its " -"performance and accuracy. Godot's A* implementation uses points in 3D space " -"and Euclidean distances by default.\n" -"You must add points manually with [method add_point] and create segments " -"manually with [method connect_points]. Once done, you can test if there is a " -"path between two points with the [method are_points_connected] function, get " -"a path containing indices by [method get_id_path], or one containing actual " -"coordinates with [method get_point_path].\n" -"It is also possible to use non-Euclidean distances. To do so, create a class " -"that extends [AStar3D] and override methods [method _compute_cost] and " -"[method _estimate_cost]. Both take two indices and return a length, as is " -"shown in the following example.\n" -"[codeblocks]\n" -"[gdscript]\n" -"class MyAStar:\n" -" extends AStar3D\n" -"\n" -" func _compute_cost(u, v):\n" -" return abs(u - v)\n" -"\n" -" func _estimate_cost(u, v):\n" -" return min(0, abs(u - v) - 1)\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyAStar : AStar3D\n" -"{\n" -" public override float _ComputeCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Abs((int)(fromId - toId));\n" -" }\n" -"\n" -" public override float _EstimateCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Min(0, Mathf.Abs((int)(fromId - toId)) - 1);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[method _estimate_cost] should return a lower bound of the distance, i.e. " -"[code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. This serves as a " -"hint to the algorithm because the custom [method _compute_cost] might be " -"computation-heavy. If this is not the case, make [method _estimate_cost] " -"return the same value as [method _compute_cost] to provide the algorithm with " -"the most accurate information.\n" -"If the default [method _estimate_cost] and [method _compute_cost] methods are " -"used, or if the supplied [method _estimate_cost] method returns a lower bound " -"of the cost, then the paths returned by A* will be the lowest-cost paths. " -"Here, the cost of a path equals the sum of the [method _compute_cost] results " -"of all segments in the path multiplied by the [code]weight_scale[/code]s of " -"the endpoints of the respective segments. If the default methods are used and " -"the [code]weight_scale[/code]s of all points are set to [code]1.0[/code], " -"then this equals the sum of Euclidean distances of all segments in the path." -msgstr "" -"A* (A-Stern) ist ein Computeralgorithmus, der bei der Wegfindung und der " -"Graphendurchquerung eingesetzt wird, d.h. bei der Ermittlung kurzer Wege " -"zwischen Vertices (Punkten), die durch eine bestimmte Menge von Kanten " -"(Segmenten) verlaufen. Aufgrund seiner Leistungsfähigkeit und Genauigkeit ist " -"er weit verbreitet. Die A*-Implementierung von Godot verwendet standardmäßig " -"Punkte im 3D-Raum und euklidische Abstände.\n" -"Sie müssen Punkte manuell mit [method add_point] hinzufügen und Segmente " -"manuell mit [method connect_points] erstellen. Danach können Sie mit der " -"Funktion [method are_points_connected] prüfen, ob es einen Pfad zwischen zwei " -"Punkten gibt, mit [method get_id_path] einen Pfad mit Indizes oder mit " -"[method get_point_path] einen Pfad mit tatsächlichen Koordinaten erhalten.\n" -"Es ist auch möglich, nicht-euklidische Distanzen zu verwenden. Erstellen Sie " -"dazu eine Klasse, die [AStar3D] erweitert, und überschreiben Sie die Methoden " -"[method _compute_cost] und [method _estimate_cost]. Beide nehmen zwei Indizes " -"und geben eine Länge zurück, wie im folgenden Beispiel gezeigt wird.\n" -"[codeblocks]\n" -"[gdscript]\n" -"class MyAStar:\n" -" extends AStar3D\n" -"\n" -" func _compute_cost(u, v):\n" -" return abs(u - v)\n" -"\n" -" func _estimate_cost(u, v):\n" -" return min(0, abs(u - v) - 1)\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyAStar : AStar3D\n" -"{\n" -" public override float _ComputeCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Abs((int)(fromId - toId));\n" -" }\n" -"\n" -" public override float _EstimateCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Min(0, Mathf.Abs((int)(fromId - toId)) - 1);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[method _estimate_cost] sollte eine untere Schwelle für den Abstand " -"zurückgeben, d.h. [code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. " -"Dies dient als Hinweis für den Algorithmus, da die benutzerdefinierte " -"[Methode _compute_cost] möglicherweise sehr rechenintensiv ist. Wenn dies " -"nicht der Fall ist, sollte [method _estimate_cost] denselben Wert wie [method " -"_compute_cost] zurückgeben, um dem Algorithmus die genauesten Informationen " -"zu liefern.\n" -"Wenn die Standardmethoden [methode _estimate_cost] und [methode " -"_compute_cost] verwendet werden oder wenn die mitgelieferte Methode [methode " -"_estimate_cost] eine untere Schwelle der Kosten zurückgibt, dann sind die von " -"A* zurückgegebenen Pfade die Pfade mit den niedrigsten Kosten. Dabei sind die " -"Kosten eines Pfades gleich der Summe der [method _compute_cost]-Ergebnisse " -"aller Segmente des Pfades multipliziert mit den [code]weight_scale[/code]s " -"der Endpunkte der jeweiligen Segmente. Wenn die Standardmethoden verwendet " -"werden und die [code]weight_scale[/code]s aller Punkte auf [code]1.0[/code] " -"gesetzt werden, dann entspricht dies der Summe der euklidischen Distanzen " -"aller Segmente im Pfad." - msgid "" "Adds a new point at the given position with the given identifier. The [param " "id] must be 0 or larger, and the [param weight_scale] must be 0.0 or " @@ -12464,73 +10366,6 @@ msgstr "" "5[/code] reicht. Es ist die Position im Segment, die dem angegebenen Punkt am " "nächsten liegt." -msgid "" -"[AStarGrid2D] is a variant of [AStar2D] that is specialized for partial 2D " -"grids. It is simpler to use because it doesn't require you to manually create " -"points and connect them together. This class also supports multiple types of " -"heuristics, modes for diagonal movement, and a jumping mode to speed up " -"calculations.\n" -"To use [AStarGrid2D], you only need to set the [member region] of the grid, " -"optionally set the [member cell_size], and then call the [method update] " -"method:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var astar_grid = AStarGrid2D.new()\n" -"astar_grid.region = Rect2i(0, 0, 32, 32)\n" -"astar_grid.cell_size = Vector2(16, 16)\n" -"astar_grid.update()\n" -"print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, " -"0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, " -"0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/gdscript]\n" -"[csharp]\n" -"AStarGrid2D astarGrid = new AStarGrid2D();\n" -"astarGrid.Region = new Rect2I(0, 0, 32, 32);\n" -"astarGrid.CellSize = new Vector2I(16, 16);\n" -"astarGrid.Update();\n" -"GD.Print(astarGrid.GetIdPath(Vector2I.Zero, new Vector2I(3, 4))); // prints " -"(0, 0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"GD.Print(astarGrid.GetPointPath(Vector2I.Zero, new Vector2I(3, 4))); // " -"prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"To remove a point from the pathfinding grid, it must be set as \"solid\" with " -"[method set_point_solid]." -msgstr "" -"[AStarGrid2D] ist eine Variante von [AStar2D], die auf partielle 2D-Gitter " -"spezialisiert ist. Sie ist einfacher zu verwenden, da Sie nicht manuell " -"Punkte erstellen und diese miteinander verbinden müssen. Diese Klasse " -"unterstützt außerdem mehrere Arten von Heuristiken, Modi für diagonale " -"Bewegungen und einen Sprungmodus, um Berechnungen zu beschleunigen.\n" -"Um [AStarGrid2D] zu verwenden, müssen Sie nur die [member region] des Gitters " -"festlegen, optional die [member cell_size] einstellen und dann die [method " -"update] Methode aufrufen:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var astar_grid = AStarGrid2D.new()\n" -"astar_grid.region = Rect2i(0, 0, 32, 32)\n" -"astar_grid.cell_size = Vector2(16, 16)\n" -"astar_grid.update()\n" -"print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, " -"0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, " -"0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/gdscript]\n" -"[csharp]\n" -"AStarGrid2D astarGrid = new AStarGrid2D();\n" -"astarGrid.Region = new Rect2I(0, 0, 32, 32);\n" -"astarGrid.CellSize = new Vector2I(16, 16);\n" -"astarGrid.Update();\n" -"GD.Print(astarGrid.GetIdPath(Vector2I.Zero, new Vector2I(3, 4))); // prints " -"(0, 0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"GD.Print(astarGrid.GetPointPath(Vector2I.Zero, new Vector2I(3, 4))); // " -"prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Um einen Punkt aus dem Pfadfindungsgitter zu entfernen, muss er mit [method " -"set_point_solid] als \"solid\" gesetzt werden." - msgid "" "Clears the grid and sets the [member region] to [code]Rect2i(0, 0, 0, 0)[/" "code]." @@ -12821,29 +10656,6 @@ msgstr "" msgid "A texture that crops out part of another Texture2D." msgstr "Eine Textur, die einen Teil einer anderen Texture2D ausschneidet." -msgid "" -"[Texture2D] resource that draws only part of its [member atlas] texture, as " -"defined by the [member region]. An additional [member margin] can also be " -"set, which is useful for small adjustments.\n" -"Multiple [AtlasTexture] resources can be cropped from the same [member " -"atlas]. Packing many smaller textures into a singular large texture helps to " -"optimize video memory costs and render calls.\n" -"[b]Note:[/b] [AtlasTexture] cannot be used in an [AnimatedTexture], and may " -"not tile properly in nodes such as [TextureRect], when inside other " -"[AtlasTexture] resources." -msgstr "" -"[Texture2D]-Ressource, die nur einen Teil ihrer [member atlas]-Textur " -"zeichnet, wie durch die [member region] definiert. Es kann auch ein " -"zusätzlicher [member margin] gesetzt werden, der für kleine Anpassungen " -"nützlich ist.\n" -"Mehrere [AtlasTexture]-Ressourcen können aus demselben [member atlas] " -"beschnitten werden. Das Packen vieler kleinerer Texturen in eine einzelne " -"große Textur hilft, die Videospeicherkosten und Renderaufrufe zu optimieren.\n" -"[b]Hinweis:[/b] [AtlasTexture] kann nicht in einer [AnimatedTexture] " -"verwendet werden und lässt sich möglicherweise nicht richtig in Knoten wie " -"[TextureRect] kacheln, wenn sie sich innerhalb anderer [AtlasTexture]-" -"Ressourcen befinden." - msgid "Stores information about the audio buses." msgstr "Speichert Informationen über die Audiobusse." @@ -13682,16 +11494,6 @@ msgstr "" "Ein Audioeffekt, mit dem die Intensität des Stereo-Panning eingestellt werden " "kann." -msgid "" -"Values greater than 1.0 increase intensity of any panning on audio passing " -"through this effect, whereas values less than 1.0 will decrease the panning " -"intensity. A value of 0.0 will downmix audio to mono." -msgstr "" -"Werte über 1,0 erhöhen die Intensität des Pannings bei Audios, die diesen " -"Effekt durchlaufen, während Werte unter 1,0 die Intensität des Pannings " -"verringern. Bei einem Wert von 0,0 wird das Audiomaterial auf Mono " -"heruntergemischt." - msgid "Overrides the location sounds are heard from." msgstr "Überschreibt den Ort, von dem aus Töne gehört werden." @@ -13939,12 +11741,6 @@ msgstr "" "Verbindet den Ausgang des Busses an [param bus_idx] mit dem Bus mit dem Namen " "[param send]." -msgid "" -"Sets the volume of the bus at index [param bus_idx] to [param volume_db]." -msgstr "" -"Setzt die Lautstärke des Busses am Index [param bus_idx] auf [param " -"volume_db]." - msgid "Swaps the position of two effects in bus [param bus_idx]." msgstr "" "Vertauscht die Position von zwei Effekten im Bus mit dem Index [param " @@ -14085,147 +11881,6 @@ msgstr "" msgid "An audio stream with utilities for procedural sound generation." msgstr "Ein Audiostrom mit Hilfsprogrammen für die prozedurale Klangerzeugung." -msgid "" -"[AudioStreamGenerator] is a type of audio stream that does not play back " -"sounds on its own; instead, it expects a script to generate audio data for " -"it. See also [AudioStreamGeneratorPlayback].\n" -"Here's a sample on how to use it to generate a sine wave:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var playback # Will hold the AudioStreamGeneratorPlayback.\n" -"@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate\n" -"var pulse_hz = 440.0 # The frequency of the sound wave.\n" -"\n" -"func _ready():\n" -" $AudioStreamPlayer.play()\n" -" playback = $AudioStreamPlayer.get_stream_playback()\n" -" fill_buffer()\n" -"\n" -"func fill_buffer():\n" -" var phase = 0.0\n" -" var increment = pulse_hz / sample_hz\n" -" var frames_available = playback.get_frames_available()\n" -"\n" -" for i in range(frames_available):\n" -" playback.push_frame(Vector2.ONE * sin(phase * TAU))\n" -" phase = fmod(phase + increment, 1.0)\n" -"[/gdscript]\n" -"[csharp]\n" -"[Export] public AudioStreamPlayer Player { get; set; }\n" -"\n" -"private AudioStreamGeneratorPlayback _playback; // Will hold the " -"AudioStreamGeneratorPlayback.\n" -"private float _sampleHz;\n" -"private float _pulseHz = 440.0f; // The frequency of the sound wave.\n" -"\n" -"public override void _Ready()\n" -"{\n" -" if (Player.Stream is AudioStreamGenerator generator) // Type as a " -"generator to access MixRate.\n" -" {\n" -" _sampleHz = generator.MixRate;\n" -" Player.Play();\n" -" _playback = (AudioStreamGeneratorPlayback)Player." -"GetStreamPlayback();\n" -" FillBuffer();\n" -" }\n" -"}\n" -"\n" -"public void FillBuffer()\n" -"{\n" -" double phase = 0.0;\n" -" float increment = _pulseHz / _sampleHz;\n" -" int framesAvailable = _playback.GetFramesAvailable();\n" -"\n" -" for (int i = 0; i < framesAvailable; i++)\n" -" {\n" -" _playback.PushFrame(Vector2.One * (float)Mathf.Sin(phase * Mathf." -"Tau));\n" -" phase = Mathf.PosMod(phase + increment, 1.0);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"In the example above, the \"AudioStreamPlayer\" node must use an " -"[AudioStreamGenerator] as its stream. The [code]fill_buffer[/code] function " -"provides audio data for approximating a sine wave.\n" -"See also [AudioEffectSpectrumAnalyzer] for performing real-time audio " -"spectrum analysis.\n" -"[b]Note:[/b] Due to performance constraints, this class is best used from C# " -"or from a compiled language via GDExtension. If you still want to use this " -"class from GDScript, consider using a lower [member mix_rate] such as 11,025 " -"Hz or 22,050 Hz." -msgstr "" -"[AudioStreamGenerator] ist ein Typ von Audiostream, der nicht von sich aus " -"Töne abspielt, sondern ein Skript erwartet, das Audiodaten für ihn erzeugt. " -"Siehe auch [AudioStreamGeneratorPlayback].\n" -"Hier ist ein Beispiel, wie man damit eine Sinuswelle erzeugt:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var playback # Will hold the AudioStreamGeneratorPlayback.\n" -"@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate\n" -"var pulse_hz = 440.0 # The frequency of the sound wave.\n" -"\n" -"func _ready():\n" -" $AudioStreamPlayer.play()\n" -" playback = $AudioStreamPlayer.get_stream_playback()\n" -" fill_buffer()\n" -"\n" -"func fill_buffer():\n" -" var phase = 0.0\n" -" var increment = pulse_hz / sample_hz\n" -" var frames_available = playback.get_frames_available()\n" -"\n" -" for i in range(frames_available):\n" -" playback.push_frame(Vector2.ONE * sin(phase * TAU))\n" -" phase = fmod(phase + increment, 1.0)\n" -"[/gdscript]\n" -"[csharp]\n" -"[Export] public AudioStreamPlayer Player { get; set; }\n" -"\n" -"private AudioStreamGeneratorPlayback _playback; // Will hold the " -"AudioStreamGeneratorPlayback.\n" -"private float _sampleHz;\n" -"private float _pulseHz = 440.0f; // The frequency of the sound wave.\n" -"\n" -"public override void _Ready()\n" -"{\n" -" if (Player.Stream is AudioStreamGenerator generator) // Type as a " -"generator to access MixRate.\n" -" {\n" -" _sampleHz = generator.MixRate;\n" -" Player.Play();\n" -" _playback = (AudioStreamGeneratorPlayback)Player." -"GetStreamPlayback();\n" -" FillBuffer();\n" -" }\n" -"}\n" -"\n" -"public void FillBuffer()\n" -"{\n" -" double phase = 0.0;\n" -" float increment = _pulseHz / _sampleHz;\n" -" int framesAvailable = _playback.GetFramesAvailable();\n" -"\n" -" for (int i = 0; i < framesAvailable; i++)\n" -" {\n" -" _playback.PushFrame(Vector2.One * (float)Mathf.Sin(phase * Mathf." -"Tau));\n" -" phase = Mathf.PosMod(phase + increment, 1.0);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Im obigen Beispiel muss der Knoten \"AudioStreamPlayer\" einen " -"[AudioStreamGenerator] als Stream verwenden. Die Funktion [code]fill_buffer[/" -"code] liefert Audiodaten zur Annäherung an eine Sinuswelle.\n" -"Siehe auch [AudioEffectSpectrumAnalyzer] zur Durchführung einer Echtzeit-" -"Audio-Spektrum-Analyse.\n" -"[b]Hinweis:[/b] Aufgrund von Performance-Beschränkungen wird diese Klasse am " -"besten von C# oder von einer kompilierten Sprache über GDExtension verwendet. " -"Wenn Sie diese Klasse dennoch über GDScript verwenden möchten, sollten Sie " -"eine niedrigere [member mix_rate] wie 11.025 Hz oder 22.050 Hz verwenden." - msgid "" "The length of the buffer to generate (in seconds). Lower values result in " "less latency, but require the script to generate audio data faster, resulting " @@ -14370,13 +12025,6 @@ msgstr "Audio-Mikrofonaufnahme-Demo" msgid "MP3 audio stream driver." msgstr "MP3 Audio Stream Treiber." -msgid "" -"MP3 audio stream driver. See [member data] if you want to load an MP3 file at " -"run-time." -msgstr "" -"MP3-Audio-Stream-Treiber. Siehe [Mitgliedsdaten], wenn Sie eine MP3-Datei zur " -"Laufzeit laden wollen." - msgid "" "Contains the audio data in bytes.\n" "You can load a file without having to import it beforehand using the code " @@ -14454,20 +12102,6 @@ msgstr "" msgid "Runtime file loading and saving" msgstr "Laden und Speichern von Dateien zur Laufzeit" -msgid "" -"Creates a new AudioStreamOggVorbis instance from the given buffer. The buffer " -"must contain Ogg Vorbis data." -msgstr "" -"Erzeugt eine neue AudioStreamOggVorbis-Instanz aus dem angegebenen Puffer. " -"Der Puffer muss OggVorbis-Daten enthalten." - -msgid "" -"Creates a new AudioStreamOggVorbis instance from the given file path. The " -"file must be in Ogg Vorbis format." -msgstr "" -"Erzeugt eine neue AudioStreamOggVorbis-Instanz aus dem angegebenen Dateipfad. " -"Die Datei muss im OggVorbis-Format vorliegen." - msgid "" "If [code]true[/code], the audio will play again from the specified [member " "loop_offset] once it is done playing. Useful for ambient sounds and " @@ -14508,15 +12142,6 @@ msgstr "" "get_stream_playback] oder [method AudioStreamPlayer3D.get_stream_playback] " "erhalten werden." -msgid "" -"Return true whether the stream associated with an integer ID is still " -"playing. Check [method play_stream] for information on when this ID becomes " -"invalid." -msgstr "" -"Gibt true zurück, wenn der mit einer Integer-ID verbundene Stream noch " -"abgespielt wird. Siehe [method play_stream] für Informationen darüber, wann " -"diese ID ungültig wird." - msgid "" "Change the stream pitch scale. The [param stream] argument is an integer ID " "returned by [method play_stream]." @@ -14688,9 +12313,6 @@ msgstr "" "Wenn [code]true[/code], wird die Wiedergabe angehalten. Sie können sie " "fortsetzen, indem Sie [member stream_paused] auf [code]false[/code] setzen." -msgid "Base volume before attenuation." -msgstr "Grundlautstärke vor Dämpfung." - msgid "Emitted when the audio stops playing." msgstr "Wird ausgegeben, wenn der Ton aufhört zu spielen." @@ -14869,12 +12491,11 @@ msgid "" "greater than [code]0.0[/code] to achieve linear attenuation clamped to a " "sphere of a defined size." msgstr "" -"Keine Abschwächung der Lautstärke in Abhängigkeit von der Entfernung. Der Ton " -"wird im Gegensatz zu einem [AudioStreamPlayer] immer noch positionsbezogen " -"gehört. Die [Konstante ATTENUATION_DISABLED] kann mit einem [member " -"max_distance]-Wert größer als [code]0.0[/code] kombiniert werden, um eine " -"lineare Dämpfung zu erreichen, die auf eine Kugel definierter Größe begrenzt " -"ist." +"Keine entfernungsabhängige Abschwächung der Lautstärke. Der Ton wird im " +"Gegensatz zu einem [AudioStreamPlayer] immer noch positionsbezogen gehört. " +"Die [Konstante ATTENUATION_DISABLED] kann mit einem [member max_distance]-" +"Wert größer als [code]0.0[/code] kombiniert werden, um eine lineare Dämpfung " +"zu erreichen, die auf eine Kugel definierter Größe begrenzt ist." msgid "Disables doppler tracking." msgstr "Deaktiviert die Dopplerverfolgung." @@ -15026,26 +12647,9 @@ msgstr "" "zu speichern. Siehe auch [AudioStreamGenerator] für prozedurale " "Audioerzeugung." -msgid "" -"Contains the audio data in bytes.\n" -"[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned PCM8 " -"to signed PCM8, subtract 128 from each byte." -msgstr "" -"Enthält die Audiodaten in Bytes.\n" -"[b]Hinweis:[/b] Diese Eigenschaft erwartet vorzeichenbehaftete PCM8-Daten. Um " -"PCM8 ohne Vorzeichen in PCM8 mit Vorzeichen zu konvertieren, ziehen Sie 128 " -"von jedem Byte ab." - msgid "Audio format. See [enum Format] constants for values." msgstr "Audioformat. Siehe [enum Format] Konstanten für Werte." -msgid "" -"The loop mode. This information will be imported automatically from the WAV " -"file if present. See [enum LoopMode] constants for values." -msgstr "" -"Der Schleifenmodus. Diese Information wird, falls vorhanden, automatisch aus " -"der WAV-Datei importiert. Siehe [enum LoopMode] Konstanten für Werte." - msgid "" "The sample rate for mixing this audio. Higher values require more storage " "space, but result in better quality.\n" @@ -15076,15 +12680,6 @@ msgstr "" msgid "If [code]true[/code], audio is stereo." msgstr "Wenn [code]true[/code], ist der Ton stereo." -msgid "8-bit audio codec." -msgstr "8-Bit-Audio-Codec." - -msgid "16-bit audio codec." -msgstr "16-Bit-Audio-Codec." - -msgid "Audio is compressed using IMA ADPCM." -msgstr "Audio wird mit IMA ADPCM komprimiert." - msgid "Audio does not loop." msgstr "Audio wird nicht wiederholt." @@ -15248,23 +12843,6 @@ msgstr "" "Um sowohl Linksklick als auch Rechtsklick zuzulassen, verwendet man " "[code]MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_RIGHT[/code]." -msgid "" -"If [code]true[/code], the button's state is pressed. Means the button is " -"pressed down or toggled (if [member toggle_mode] is active). Only works if " -"[member toggle_mode] is [code]true[/code].\n" -"[b]Note:[/b] Setting [member button_pressed] will result in [signal toggled] " -"to be emitted. If you want to change the pressed state without emitting that " -"signal, use [method set_pressed_no_signal]." -msgstr "" -"Wenn [code]true[/code], wird der Zustand des Buttons gedrückt. Bedeutet, dass " -"die Taste nach unten gedrückt oder angeschaltet wird (wenn [member " -"toggle_mode] aktiv ist). Funktioniert nur, wenn [member toggle_mode] " -"[code]true[/code] ist.\n" -"[b]Hinweis:[/b] Die Einstellung [member button_pressed] führt dazu, dass " -"[signal toggled] aufgerufen wird. Wenn Sie den gedrückten Zustand ändern " -"möchten, ohne dieses Signal zu emittieren, verwenden Sie [Method " -"set_pressed_no_signal]." - msgid "" "If [code]true[/code], the button is in disabled state and can't be clicked or " "toggled." @@ -15299,13 +12877,6 @@ msgstr "" "toggle_mode] [code]false[/code] ist, wird die Verknüpfung ohne visuelles " "Feedback aktiviert." -msgid "" -"If [code]true[/code], the button will add information about its shortcut in " -"the tooltip." -msgstr "" -"Wenn [code]true[/code], wird der Button Informationen über ihre Verknüpfung " -"im Tooltip hinzufügen." - msgid "" "If [code]true[/code], the button is in toggle mode. Makes the button flip " "state between pressed and unpressed each time its area is clicked." @@ -15509,27 +13080,6 @@ msgstr "" "[member anisotropy_flowmap] multipliziert, wenn dort eine Textur definiert " "ist und die Textur einen Alphakanal enthält." -msgid "" -"If [code]true[/code], anisotropy is enabled. Anisotropy changes the shape of " -"the specular blob and aligns it to tangent space. This is useful for brushed " -"aluminium and hair reflections.\n" -"[b]Note:[/b] Mesh tangents are needed for anisotropy to work. If the mesh " -"does not contain tangents, the anisotropy effect will appear broken.\n" -"[b]Note:[/b] Material anisotropy should not to be confused with anisotropic " -"texture filtering, which can be enabled by setting [member texture_filter] to " -"[constant TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC]." -msgstr "" -"Wenn [code]true[/code] aktiviert ist, wird Anisotropie aktiviert. Anisotropie " -"verändert die Form des spekulären Blobs und richtet es zum tangenten Raum " -"aus. Dies ist nützlich für gebürstetes Aluminium und Haarreflexionen.\n" -"[b]Anmerkung:[/b] Mesh-Tantigen werden benötigt, um anisotropie zu arbeiten. " -"Wenn das Netz keine Tangenten enthält, erscheint der Anisotropieeffekt " -"gebrochen.\n" -"[b]Anmerkung:[/b] Materialanisotropie sollte nicht mit anisotroper " -"Texturfilterung verwechselt werden, die durch Einstellung [member " -"textur_filter] auf [constant TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC] " -"aktiviert werden kann." - msgid "" "Texture that offsets the tangent map for anisotropy calculations and " "optionally controls the anisotropy effect (if an alpha channel is present). " @@ -15618,32 +13168,6 @@ msgstr "" "Textur, die verwendet wird, um den Hintergrund-Effekt pro Pixel zu steuern. " "Hinzugefügt zu [member backlight]." -msgid "" -"Controls how the object faces the camera. See [enum BillboardMode].\n" -"[b]Note:[/b] When billboarding is enabled and the material also casts " -"shadows, billboards will face [b]the[/b] camera in the scene when rendering " -"shadows. In scenes with multiple cameras, the intended shadow cannot be " -"determined and this will result in undefined behavior. See [url=https://" -"github.com/godotengine/godot/pull/72638]GitHub Pull Request #72638[/url] for " -"details.\n" -"[b]Note:[/b] Billboard mode is not suitable for VR because the left-right " -"vector of the camera is not horizontal when the screen is attached to your " -"head instead of on the table. See [url=https://github.com/godotengine/godot/" -"issues/41567]GitHub issue #41567[/url] for details." -msgstr "" -"Kontrolliert, wie das Objekt der Kamera zugewandt ist. Siehe [enum " -"BillboardMode].\n" -"[b]Hinweis:[/b] Wenn Billboarding aktiviert ist und das Material auch " -"Schatten wirft, zeigen Billboards beim Rendern von Schatten auf [b]die[/b] " -"Kamera in der Szene. In Szenen mit mehreren Kameras kann der beabsichtigte " -"Schatten nicht bestimmt werden, was zu einem undefinierten Verhalten führt. " -"Siehe [url=https://github.com/godotengine/godot/pull/72638]GitHub Pull-" -"Request #72638[/url] für Details.\n" -"[b]Hinweis:[/b] Billboard-Modus ist nicht für VR geeignet, da der links-" -"rechts Vektor der Kamera nicht horizontal ist, wenn der Bildschirm statt auf " -"dem Tisch an Ihrem Kopf angebracht ist. Siehe [url=https://github.com/" -"godotengine/godot/issues/41567]GitHub Issue #41567[/url] für Details." - msgid "" "The material's blend mode.\n" "[b]Note:[/b] Values other than [code]Mix[/code] force the object into the " @@ -16274,12 +13798,6 @@ msgstr "Nicht spezifizierte Position." msgid "Custom drawing in 2D" msgstr "benutzerdefiniertes Zeichnen in 2D" -msgid "Emitted when becoming hidden." -msgstr "Gesendet wenn es versteckt wird." - -msgid "Emitted when the visibility (hidden/visible) changes." -msgstr "Gesendet wenn die Sichtbarkeit (versteckt/sichtbar) sich verändert." - msgid "The [CanvasItem]'s visibility has changed." msgstr "[CanvasItem] Sichtbar/Unsichtbar Modus geändert." @@ -16350,6 +13868,12 @@ msgstr "" "Versteckt allen [CanvasItem]s unter diesem [CanvasLayer]. Eqivalent dazu, " "[member visible] auf [code]false[/code] zu setzten." +msgid "The layer's scale." +msgstr "Die Skalierung der Ebene." + +msgid "Using CharacterBody2D" +msgstr "Verwendung von CharacterBody2D" + msgid "The circle's radius." msgstr "Radius des Kreises." @@ -17297,6 +14821,18 @@ msgstr "" "(Node) gibt.\n" "Siehe [Methode add_theme_stylebox_override]." +msgid "Maximum angle." +msgstr "Maximaler Winkel." + +msgid "Minimum angle." +msgstr "Minimaler Winkel." + +msgid "Maximum damping." +msgstr "Maximale Dämpfung." + +msgid "SSL certificates" +msgstr "SSL Zertifikat" + msgid "" "The physics layers this area is in.\n" "Collidable objects can exist in any of 32 different layers. These layers work " @@ -17349,15 +14885,6 @@ msgstr "Dateisystem" msgid "Faking global illumination" msgstr "Vortäuschen von Global Illumination" -msgid "" -"Returns OS theme accent color. Returns [code]Color(0, 0, 0, 0)[/code], if " -"accent color is unknown.\n" -"[b]Note:[/b] This method is implemented on macOS and Windows." -msgstr "" -"Gibt die Akzentfarbe des OS-Themas zurück. Gibt [code]Farbe(0, 0, 0, 0)[/" -"code] zurück, wenn die Akzentfarbe unbekannt ist.\n" -"[b]Hinweis:[/b] Diese Methode ist auf macOS und Windows implementiert." - msgid "" "Returns the accelerator of the item at index [param idx]. Accelerators are " "special combinations of keys that activate the item, no matter which control " @@ -17704,6 +15231,13 @@ msgstr "" msgid "Name of the application." msgstr "Name der Anwendung." +msgid "" +"See [url=https://developer.android.com/reference/android/Manifest." +"permission#MASTER_CLEAR]MASTER_CLEAR[/url]." +msgstr "" +"Siehe [url=https://developer.android.com/reference/android/Manifest." +"permission#MASTER_CLEAR]MASTER_CLEAR[/url]." + msgid "Deprecated in API level 15." msgstr "Veraltet in API-Level 15." @@ -17808,6 +15342,15 @@ msgstr "" "Gibt [code]true[/code] zurück, wenn die Datei am Index [param idx] korrekt " "importiert wurde." +msgid "Import plugins" +msgstr "Importieren von Plugins" + +msgid "Inspector plugins" +msgstr "Inspektor-Plugins" + +msgid "Godot editor's interface." +msgstr "Oberfläche des Godot Editors." + msgid "Returns the editor's [EditorSettings] instance." msgstr "Gibt die [EditorSettings] Instanz des Editors zurück." @@ -17847,6 +15390,9 @@ msgstr "Gesendet wenn das Rechteck Element geändert wurde." msgid "Version control systems" msgstr "Versionsverwaltungssysteme" +msgid "High-level multiplayer" +msgstr "High-Level-Multiplayer" + msgid "" "Returns [code]true[/code] if the peer is currently active (i.e. the " "associated [ENetConnection] is still valid)." @@ -17945,8 +15491,8 @@ msgstr "" msgid "Volumetric fog and fog volumes" msgstr "Volumetrischer Nebel und Nebelvolumen" -msgid "Removes all font sizes from the cache entry" -msgstr "Entfernt alle Schriftgrößen aus dem Cache-Eintrag" +msgid "GDExtension overview" +msgstr "GDExtension Übersicht" msgid "" "Returns [code]true[/code] if [param point] is inside the circle or if it's " @@ -17989,6 +15535,9 @@ msgstr "" msgid "Using gridmaps" msgstr "Verwendung von Gridmaps" +msgid "TLS certificates" +msgstr "TLS Zertifikate" + msgid "Making HTTP requests" msgstr "HTTP-Anfragen stellen" @@ -18437,6 +15986,12 @@ msgstr "" "Das Backen von Lightmaps ist fehlgeschlagen, da in diesem Godot-Build kein " "Lightmapper verfügbar ist." +msgid "Returns [code]true[/code] if a \"redo\" action is available." +msgstr "Gibt [code]true[/code] zurück, wenn eine \"redo\" Aktion möglich ist." + +msgid "Returns [code]true[/code] if an \"undo\" action is available." +msgstr "Gibt [code]true[/code] zurück, wenn eine \"undo\" Aktion möglich ist." + msgid "Generic 3D position hint for editing." msgstr "Generischer 3D-Positionshinweis für die Bearbeitung." @@ -18517,6 +16072,9 @@ msgstr "Stellt die Größe der Aufzählung [enum ArrayType] dar." msgid "Using the MeshDataTool" msgstr "Verwendung des MeshDataTools" +msgid "2D meshes" +msgstr "2D-Meshes" + msgid "" "Returns the number of blend shapes available. Produces an error if [member " "mesh] is [code]null[/code]." @@ -18540,6 +16098,9 @@ msgid "Returns [code]true[/code] if there is a [member multiplayer_peer] set." msgstr "" "Gibt [code]true[/code] zurück, wenn ein [member multiplayer_peer] gesetzt ist." +msgid "Thread-safe APIs" +msgstr "Thread-sichere APIs" + msgid "Using NavigationAgents" msgstr "Verwenden von NavigationAgents" @@ -18560,6 +16121,9 @@ msgstr "" "(Node) verwenden soll, und aktualisiert außerdem das [code]obstacle[/code] " "auf dem NavigationServer." +msgid "Using NavigationPathQueryObjects" +msgstr "NavigationPathQueryObjects verwenden" + msgid "Navigation Polygon 2D Demo" msgstr "Navigation Polygon 2D-Demo" @@ -18607,6 +16171,9 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "Legt die globale Transformation für die Region fest." +msgid "All Demos" +msgstr "Alle Demos" + msgid "" "Returns [code]true[/code] if the node is ready, i.e. it's inside scene tree " "and all its children are initialized.\n" @@ -18616,18 +16183,12 @@ msgstr "" "sich im Szenenbaum und alle seine Kinder sind initialisiert.\n" "Die [Methode request_ready] setzt ihn auf [code]false[/code] zurück." -msgid "Global position." -msgstr "Gobale Position." - -msgid "Global rotation in radians." -msgstr "Globale Rotation im Bogenmaß." - -msgid "Global scale." -msgstr "Globaler Maßstab." - msgid "Object class introduction" msgstr "Einführung der Objektklasse" +msgid "Object notifications" +msgstr "Objekt-Benachrichtigungen" + msgid "" "Returns the object's [Script] instance, or [code]null[/code] if no script is " "attached." @@ -18641,6 +16202,36 @@ msgstr "Eine Aktionsmenge hinzufügen." msgid "Add an interaction profile." msgstr "Ein Interaktionsprofil hinzufügen." +msgid "XrResult documentation" +msgstr "XrResult Dokumentation" + +msgid "XrInstance documentation" +msgstr "XrInstance Dokumentation" + +msgid "XrSpace documentation" +msgstr "XrSpace Dokumentation" + +msgid "XrSession documentation" +msgstr "XrSession Dokumentation" + +msgid "XrSystemId documentation" +msgstr "XrSystemId Dokumentation" + +msgid "xrBeginSession documentation" +msgstr "xrBeginSession Dokumentation" + +msgid "XrPosef documentation" +msgstr "XrPosef Dokumentation" + +msgid "Left hand." +msgstr "Linke Hand." + +msgid "Palm joint." +msgstr "Handflächengelenk." + +msgid "Wrist joint." +msgstr "Handgelenk." + msgid "" "Returns the ID of the selected item, or [code]-1[/code] if no item is " "selected." @@ -18691,6 +16282,9 @@ msgstr "" "Löscht das Array. Dies entspricht der Verwendung von [method resize] mit " "einer Größe von [code]0[/code]." +msgid "Returns the number of times an element is in the array." +msgstr "Gibt die Anzahl der Vorkommen eines Elements im Array zurück." + msgid "" "Searches the array for a value and returns its index or [code]-1[/code] if " "not found. Optionally, the initial search index can be passed." @@ -18885,6 +16479,9 @@ msgstr "" "Intern wird dabei derselbe Kodierungsmechanismus wie bei der Methode [method " "@GlobalScope.var_to_bytes] verwendet." +msgid "2D Parallax" +msgstr "2D-Parallaxe" + msgid "" "If [code]true[/code], the [PhysicalBone2D] will keep the transform of the " "bone it is bound to when simulating physics." @@ -18898,6 +16495,9 @@ msgstr "Legt die Transformation des Körpers fest." msgid "Sets the joint's transform." msgstr "Legt die Transformation des Gelenks fest." +msgid "Ray-casting" +msgstr "Raycasting" + msgid "" "Returns the local transform matrix of the shape with the given index in the " "area's array of shapes." @@ -19001,9 +16601,15 @@ msgstr "" "[b]Hinweis:[/b] Wenn die [Größe des Elements] ungerade ist, wird das Ergebnis " "auf [Position des Elements] gerundet." +msgid "Reflection probes" +msgstr "Reflection-Probes" + msgid "Using compute shaders" msgstr "Verwendung von Compute-Shadern" +msgid "\"Equal\" comparison." +msgstr "\"Equal\"- Vergleich." + msgid "Returns the [Transform3D] of the specified instance." msgstr "Gibt das [Transform3D] der angegebenen Instanz zurück." @@ -19020,6 +16626,9 @@ msgstr "" msgid "2D particles." msgstr "2D-Partikel." +msgid "Disable reflections." +msgstr "Deaktiviere Reflektionen." + msgid "3D Particle trails" msgstr "3D-Partikelspuren" @@ -19053,6 +16662,21 @@ msgstr "SceneTree" msgid "One-shot timer." msgstr "Einmaliger Timer." +msgid "Shading language" +msgstr "Shader-Sprache" + +msgid "Shader preprocessor" +msgstr "Shader-Präprozessor" + +msgid "GDScript Basics" +msgstr "GDScript Grundlagen" + +msgid "2D skeletons" +msgstr "2D-Skelette" + +msgid "SoftBody" +msgstr "SoftBody" + msgid "" "The physics layers this SoftBody3D [b]is in[/b]. Collision objects can exist " "in one or more of 32 different layers. See also [member collision_mask].\n" @@ -19202,11 +16826,11 @@ msgstr "" msgid "Stops listening." msgstr "Zuhören stoppen." -msgid "Returns [code]true[/code] if a \"redo\" action is available." -msgstr "Gibt [code]true[/code] zurück, wenn eine \"redo\" Aktion möglich ist." +msgid "Text orientation." +msgstr "Textorientierung." -msgid "Returns [code]true[/code] if an \"undo\" action is available." -msgstr "Gibt [code]true[/code] zurück, wenn eine \"undo\" Aktion möglich ist." +msgid "Removes dropcap." +msgstr "Entfernt dropcap." msgid "Emitted when a new interface has been added." msgstr "Wird ausgesendet, wenn eine neue Schnittstelle hinzugefügt wurde." @@ -19266,9 +16890,21 @@ msgstr "" "Gibt [code]false[/code] zurück, wenn sie nicht vorhanden ist. Verwenden Sie " "[method set_stylebox], um sie zu definieren." +msgid "Using Tilemaps" +msgstr "TileMaps verwenden" + +msgid "Horizontal half-offset." +msgstr "Horizontaler halb-offset." + +msgid "Vertical half-offset." +msgstr "Vertikaler halb-offset." + msgid "Always visible." msgstr "Immer sichtbar." +msgid "Locales" +msgstr "Locale" + msgid "The custom minimum height." msgstr "Die benutzerdefinierte kleinstmögliche Höhe." @@ -20099,6 +17735,12 @@ msgstr "" "beispielsweise auf einen Tisch in der realen Welt bezieht, ist dies die " "geschätzte Größe der Oberfläche dieses Tisches." +msgid "Root joint." +msgstr "Wurzelgelenk." + +msgid "Hips joint." +msgstr "Hüftgelenk." + msgid "" "A camera node with a few overrules for AR/VR applied, such as location " "tracking." @@ -20106,41 +17748,6 @@ msgstr "" "Ein Kameraknoten, der einige Grundregeln für AR/VR anwendet, z. B. die " "Standortverfolgung." -msgid "A spatial node representing a spatially-tracked controller." -msgstr "" -"Ein räumlicher Knoten, der einen räumlich verfolgten Controller darstellt." - -msgid "" -"This is a helper spatial node that is linked to the tracking of controllers. " -"It also offers several handy passthroughs to the state of buttons and such on " -"the controllers.\n" -"Controllers are linked by their ID. You can create controller nodes before " -"the controllers are available. If your game always uses two controllers (one " -"for each hand), you can predefine the controllers with ID 1 and 2; they will " -"become active as soon as the controllers are identified. If you expect " -"additional controllers to be used, you should react to the signals and add " -"XRController3D nodes to your scene.\n" -"The position of the controller node is automatically updated by the " -"[XRServer]. This makes this node ideal to add child nodes to visualize the " -"controller.\n" -"As many XR runtimes now use a configurable action map all inputs are named." -msgstr "" -"Dies ist ein räumlicher Hilfsknoten (Node), der mit der Verfolgung von " -"Controllern verbunden ist. Er bietet auch mehrere praktische Durchreichungen " -"für den Status von Schaltflächen und dergleichen auf den Controllern.\n" -"Controller sind durch ihre ID verknüpft. Sie können Controller-Knoten (Node) " -"erstellen, bevor die Controller verfügbar sind. Wenn Ihr Spiel immer zwei " -"Controller verwendet (einen für jede Hand), können Sie die Controller mit der " -"ID 1 und 2 vordefinieren; sie werden aktiv, sobald die Controller erkannt " -"werden. Wenn Sie erwarten, dass zusätzliche Controller verwendet werden, " -"sollten Sie auf die Signale reagieren und XRController3D-Knoten (Node) zu " -"Ihrer Szene hinzufügen.\n" -"Die Position des Controllerknotens wird automatisch vom [XRServer] " -"aktualisiert. Dies macht diesen Knoten (Node) ideal, um Kindknoten (Child " -"Node) zur Visualisierung des Controllers hinzuzufügen.\n" -"Da viele XR-Laufzeiten nun eine konfigurierbare Action Map verwenden, werden " -"alle Eingänge benannt." - msgid "Emitted when a button on this controller is pressed." msgstr "Wird ausgesendet, wenn eine Taste auf diesem Steuergerät gedrückt wird." @@ -20148,6 +17755,60 @@ msgid "Emitted when a button on this controller is released." msgstr "" "Wird ausgesendet, wenn eine Taste an diesem Controller losgelassen wird." +msgid "Returns the requested face blend shape weight." +msgstr "Gibt die Gewichtung der Blend-Shape an diesem Index zurück." + +msgid "Sets a face blend shape weight." +msgstr "Setzt die Gewichtung der Blend-Shape an diesem Index." + +msgid "Right eye looks outwards." +msgstr "Rechtes Auge schaut nach außen." + +msgid "Right eye looks inwards." +msgstr "Rechtes Auge schaut nach innen." + +msgid "Right eye looks upwards." +msgstr "Rechtes Auge schaut nach oben." + +msgid "Right eye looks downwards." +msgstr "Rechtes Auge schaut nach unten." + +msgid "Left eye looks outwards." +msgstr "Linkes Auge schaut nach außen." + +msgid "Left eye looks inwards." +msgstr "Linkes Auge schaut nach innen." + +msgid "Left eye looks upwards." +msgstr "Linkes Auge schaut nach oben." + +msgid "Left eye looks downwards." +msgstr "Linkes Auge schaut nach unten." + +msgid "Closes the right eyelid." +msgstr "Schließt rechtes Augenlid." + +msgid "Closes the left eyelid." +msgstr "Schließt linkes Augenlid." + +msgid "Right eyelid widens beyond relaxed." +msgstr "Rechtes Augenlid öffnet sich über entspannten Zustand." + +msgid "Left eyelid widens beyond relaxed." +msgstr "Linkes Augenlid öffnet sich über entspannten Zustand." + +msgid "Dilates the right eye pupil." +msgstr "Erweitert rechte Pupille." + +msgid "Dilates the left eye pupil." +msgstr "Erweitert linke Pupille." + +msgid "Opens jawbone." +msgstr "Öffnet Kieferknochen." + +msgid "Mouth stretches." +msgstr "Mund zieht sich." + msgid "" "If this is an AR interface that requires displaying a camera feed as the " "background, this method returns the feed ID in the [CameraServer] for this " @@ -20399,12 +18060,6 @@ msgstr "" "Gibt eine gültige [RID] für eine Textur zurück, auf die das aktuelle Bild " "gerendert werden soll, sofern dies von der Schnittstelle unterstützt wird." -msgid "" -"A spatial node that has its position automatically updated by the [XRServer]." -msgstr "" -"Ein räumlicher Knoten (Node), dessen Position automatisch durch den " -"[XRServer] aktualisiert wird." - msgid "" "This node can be bound to a specific pose of a [XRPositionalTracker] and will " "automatically have its [member Node3D.transform] updated by the [XRServer]. " @@ -20515,32 +18170,6 @@ msgstr "" msgid "The linear velocity of this pose." msgstr "Die lineare Geschwindigkeit dieser Pose." -msgid "" -"The name of this pose. Pose names are often driven by an action map setup by " -"the user. Godot does suggest a number of pose names that it expects " -"[XRInterface]s to implement:\n" -"- [code]root[/code] defines a root location, often used for tracked objects " -"that do not have further nodes.\n" -"- [code]aim[/code] defines the tip of a controller with the orientation " -"pointing outwards, for example: add your raycasts to this.\n" -"- [code]grip[/code] defines the location where the user grips the controller\n" -"- [code]skeleton[/code] defines the root location a hand mesh should be " -"placed when using hand tracking and the animated skeleton supplied by the XR " -"runtime." -msgstr "" -"Der Name dieser Pose. Posen-Namen werden oft durch eine vom Benutzer " -"eingerichtete Aktion-Map bestimmt. Godot schlägt eine Reihe von Posenamen " -"vor, deren Implementierung von [XRInterface]s erwartet wird:\n" -"- [code]root[/code] definiert eine Wurzelposition, die oft für verfolgte " -"Objekte verwendet wird, die keine weiteren Knoten (Node) haben.\n" -"- [code]aim[/code] definiert die Spitze eines Controllers mit der Ausrichtung " -"nach außen, zum Beispiel: füge deine Raycasts dazu.\n" -"- [code]grip[/code] definiert die Stelle, an der ein Benutzer den Controller " -"anfasst\n" -"- [code]skeleton[/code] definiert die Wurzelposition, an der ein Handmesh " -"platziert werden soll, wenn die Handverfolgung und das animierte Skelett, das " -"von der XR-Laufzeitumgebung bereitgestellt wird, verwendet werden." - msgid "" "The tracking confidence for this pose, provides insight on how accurate the " "spatial positioning of this record is." @@ -20884,42 +18513,6 @@ msgstr "Der Typ des Trackers." msgid "Helper class for XR interfaces that generates VRS images." msgstr "Hilfsklasse für XR-Interfaces, um VRS-Bilder zu erzeugen." -msgid "Allows the creation of zip files." -msgstr "Ermöglicht die Erzeugung von zip Dateien." - -msgid "" -"This class implements a writer that allows storing the multiple blobs in a " -"zip archive.\n" -"[codeblock]\n" -"func write_zip_file():\n" -" var writer := ZIPPacker.new()\n" -" var err := writer.open(\"user://archive.zip\")\n" -" if err != OK:\n" -" return err\n" -" writer.start_file(\"hello.txt\")\n" -" writer.write_file(\"Hello World\".to_utf8_buffer())\n" -" writer.close_file()\n" -"\n" -" writer.close()\n" -" return OK\n" -"[/codeblock]" -msgstr "" -"Diese Klasse implementiert einen Writer, der die Speicherung mehrerer Blobs " -"in einem Zip-Archiv ermöglicht.\n" -"[codeblock]\n" -"func write_zip_file():\n" -" var writer := ZIPPacker.new()\n" -" var err := writer.open(\"user://archive.zip\")\n" -" if err != OK:\n" -" return err\n" -" writer.start_file(\"hello.txt\")\n" -" writer.write_file(\"Hello World\".to_utf8_buffer())\n" -" writer.close_file()\n" -"\n" -" writer.close()\n" -" return OK\n" -"[/codeblock]" - msgid "Closes the underlying resources used by this instance." msgstr "" "Schließt die zugrunde liegenden Ressourcen, die von dieser Instanz verwendet " @@ -20971,36 +18564,6 @@ msgid "Add new files to the existing zip archive at the given path." msgstr "" "Fügt dem vorhandenen Zip-Archiv neue Dateien unter dem angegebenen Pfad hinzu." -msgid "Allows reading the content of a zip file." -msgstr "Ermöglicht das Lesen des Inhalts einer Zip-Datei." - -msgid "" -"This class implements a reader that can extract the content of individual " -"files inside a zip archive.\n" -"[codeblock]\n" -"func read_zip_file():\n" -" var reader := ZIPReader.new()\n" -" var err := reader.open(\"user://archive.zip\")\n" -" if err != OK:\n" -" return PackedByteArray()\n" -" var res := reader.read_file(\"hello.txt\")\n" -" reader.close()\n" -" return res\n" -"[/codeblock]" -msgstr "" -"Diese Klasse implementiert einen Reader, der den Inhalt einzelner Dateien in " -"einem Zip-Archiv extrahieren kann.\n" -"[codeblock]\n" -"func read_zip_file():\n" -" var reader := ZIPReader.new()\n" -" var err := reader.open(\"user://archive.zip\")\n" -" if err != OK:\n" -" return PackedByteArray()\n" -" var res := reader.read_file(\"hello.txt\")\n" -" reader.close()\n" -" return res\n" -"[/codeblock]" - msgid "" "Returns [code]true[/code] if the file exists in the loaded zip archive.\n" "Must be called after [method open]." diff --git a/doc/translations/es.po b/doc/translations/es.po index 4f33d7fd132..06ae0fe9f02 100644 --- a/doc/translations/es.po +++ b/doc/translations/es.po @@ -64,7 +64,7 @@ # "Francisco S. F." , 2023. # Jorge González , 2023. # Jorge Julio Torres , 2023. -# simomi 073 , 2023. +# simomi 073 , 2023, 2024. # Alejandro Ruiz Esclapez , 2023. # Carlos Cortes Garcia , 2023. # Victor Gimenez , 2024. @@ -91,12 +91,15 @@ # Jesús Arriaza , 2024. # Simja 82 , 2024. # Keider Kaize , 2024. +# Valentben , 2024. +# Alexander Diego , 2024. +# José Andrés Urdaneta , 2025. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2024-09-13 04:52+0000\n" -"Last-Translator: Keider Kaize \n" +"PO-Revision-Date: 2025-02-06 23:02+0000\n" +"Last-Translator: José Andrés Urdaneta \n" "Language-Team: Spanish \n" "Language: es\n" @@ -104,7 +107,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 5.8-dev\n" +"X-Generator: Weblate 5.10-dev\n" msgid "All classes" msgstr "Todas las clases" @@ -119,7 +122,7 @@ msgid "Resources" msgstr "Recursos" msgid "Editor-only" -msgstr "Exclusivo-Editor" +msgstr "Solo Editor" msgid "Other objects" msgstr "Otros objetos" @@ -349,15 +352,6 @@ msgstr "" msgid "Built-in GDScript constants, functions, and annotations." msgstr "Constantes, funciones y anotaciones de GDScript integradas." -msgid "" -"A list of GDScript-specific utility functions and annotations accessible from " -"any script.\n" -"For the list of the global functions and constants see [@GlobalScope]." -msgstr "" -"Una lista de funciones de utilidad y anotaciones específicas de GDScript, " -"accesibles desde cualquier script.\n" -"Para la lista de funciones globales y constantes ver [@GlobalScope]." - msgid "GDScript exports" msgstr "Exportaciones de GDScript" @@ -447,23 +441,6 @@ msgstr "" "tanto, no puede acceder a él como un [Callable] ni usarlo dentro de " "expresiones." -msgid "" -"Returns a single character (as a [String]) of the given Unicode code point " -"(which is compatible with ASCII code).\n" -"[codeblock]\n" -"a = char(65) # a is \"A\"\n" -"a = char(65 + 32) # a is \"a\"\n" -"a = char(8364) # a is \"€\"\n" -"[/codeblock]" -msgstr "" -"Devuelve un carácter como una cadena de tipo Unicode (el cual es compatible " -"con el código ASCII).\n" -"[codeblock]\n" -"a = char(65) # a es \"A\"\n" -"a = char(65 + 32) # a es \"a\"\n" -"a = char(8364) # a es \"€\"\n" -"[/codeblock]" - msgid "Use [method @GlobalScope.type_convert] instead." msgstr "Utiliza el [método @GlobalScope.type_convert] en su lugar." @@ -548,118 +525,6 @@ msgstr "" "[b]Nota:[/b] La llamada a esta función desde un [Thread] no está soportada. " "Si lo hace, devolverá un array vacío." -msgid "" -"Returns the passed [param instance] converted to a Dictionary. Can be useful " -"for serializing.\n" -"[b]Note:[/b] Cannot be used to serialize objects with built-in scripts " -"attached or objects allocated within built-in scripts.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Prints out:\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" -msgstr "" -"Devuelve la [param instance] pasada, convertida en un Dictionary. Puede ser " -"útil para serializar.\n" -"[b]Nota:[/b] No se puede utilizar para serializar objetos con scripts " -"integrados adjuntos u objetos asignados dentro de scripts integrados.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Imprime:\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" - -msgid "" -"Returns [code]true[/code] if [param value] is an instance of [param type]. " -"The [param type] value must be one of the following:\n" -"- A constant from the [enum Variant.Type] enumeration, for example [constant " -"TYPE_INT].\n" -"- An [Object]-derived class which exists in [ClassDB], for example [Node].\n" -"- A [Script] (you can use any class, including inner one).\n" -"Unlike the right operand of the [code]is[/code] operator, [param type] can be " -"a non-constant value. The [code]is[/code] operator supports more features " -"(such as typed arrays). Use the operator instead of this method if you do not " -"need dynamic type checking.\n" -"Examples:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Note:[/b] If [param value] and/or [param type] are freed objects (see " -"[method @GlobalScope.is_instance_valid]), or [param type] is not one of the " -"above options, this method will raise a runtime error.\n" -"See also [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (and other [Array] methods)." -msgstr "" -"Devuelve [code]true[/code] si [param valor] es una instancia de [param type]. " -"El valor de [param type] debe de ser uno de los siguientes:\n" -"- Una constante de la enumeración [enum Variant.Type], por ejemplo [constant " -"TYPE_INT].\n" -"- Una clase derivada de [Object] que exista en [ClassDB], por ejemplo " -"[Node].\n" -"- Un [Script] (puedes utilizar cualquier clase, incluyendo una interna).\n" -"A diferencia del operando derecho del operador [code]is[/code], [param type] " -"puede ser un valor no constante. El operador [code]is[/code] soporta más " -"características (como los arrays tipados) y es más eficaz. Utiliza el " -"operador en vez de este método si no necesitas chequeo de tipificación " -"dinámico (dynamic type checking).\n" -"Ejemplos:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Nota:[/b] Si [param value] y/o [param type] son objetos liberados (ver " -"[method @GlobalScope.is_instance_valid]), o [param type] no es una de las " -"opciones de arriba, este método lanzará un error de ejecución (runtime " -"error).\n" -"Ver también [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (y otros métodos [Array])." - -msgid "" -"Returns the length of the given Variant [param var]. The length can be the " -"character count of a [String] or [StringName], the element count of any array " -"type, or the size of a [Dictionary]. For every other Variant type, a run-time " -"error is generated and execution is stopped.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Returns 4\n" -"\n" -"b = \"Hello!\"\n" -"len(b) # Returns 6\n" -"[/codeblock]" -msgstr "" -"Devuelve la longitud de la variable [code]var[/code]. La longitud es el " -"número de caracteres de la cadena, el número de elementos de la matriz, el " -"tamaño del diccionario, etc. Para cualquier otro tipo de Variante, un error " -"de tiempo-de-ejecución es generado y la ejecución el detenida.\n" -"[b]Nota:[/b] Genera un error fatal si la variable no puede proporcionar una " -"longitud.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Devuelve 4\n" -"\n" -"b = \"Hola!\"\n" -"len(b) # Devuelve 6\n" -"[/codeblock]" - msgid "" "Returns a [Resource] from the filesystem located at the absolute [param " "path]. Unless it's already referenced elsewhere (such as in another script or " @@ -1030,88 +895,6 @@ msgstr "" "@export var c: int # Almacenado en el archivo, se muestra en el editor.\n" "[/codeblock]" -msgid "" -"Define a new subgroup for the following exported properties. This helps to " -"organize properties in the Inspector dock. Subgroups work exactly like " -"groups, except they need a parent group to exist. See [annotation " -"@export_group].\n" -"See also [constant PROPERTY_USAGE_SUBGROUP].\n" -"[codeblock]\n" -"@export_group(\"Racer Properties\")\n" -"@export var nickname = \"Nick\"\n" -"@export var age = 26\n" -"\n" -"@export_subgroup(\"Car Properties\", \"car_\")\n" -"@export var car_label = \"Speedy\"\n" -"@export var car_number = 3\n" -"[/codeblock]\n" -"[b]Note:[/b] Subgroups cannot be nested, they only provide one extra level of " -"depth. Just like the next group ends the previous group, so do the subsequent " -"subgroups." -msgstr "" -"Define un nuevo subgrupo con las propiedades exportadas. Esto ayuda a " -"organizar las propiedades en el panel de inspección. Los subgrupos funcionan " -"exactamente que los grupos, exceptuando de que necesitan que el grupo " -"principal exista. Ver [annotation @export_group].\n" -"Ver además [constant PROPERTY_USAGE_SUBGROUP].\n" -"[codeblock]\n" -"@export_group(\"Racer Properties\")\n" -"@export var nickname = \"Nick\"\n" -"@export var age = 26\n" -"\n" -"@export_subgroup(\"Car Properties\", \"car_\")\n" -"@export var car_label = \"Speedy\"\n" -"@export var car_number = 3\n" -"[/codeblock]\n" -"[b]Nota:[/b] Los subgrupos no se pueden anidar, solo proveen un nivel extra " -"de profundidad. Así como el siguiente grupo finaliza el anterior, también lo " -"hacen los consiguientes subgrupos." - -msgid "" -"Add a custom icon to the current script. The icon specified at [param " -"icon_path] is displayed in the Scene dock for every node of that class, as " -"well as in various editor dialogs.\n" -"[codeblock]\n" -"@icon(\"res://path/to/class/icon.svg\")\n" -"[/codeblock]\n" -"[b]Note:[/b] Only the script can have a custom icon. Inner classes are not " -"supported.\n" -"[b]Note:[/b] As annotations describe their subject, the [annotation @icon] " -"annotation must be placed before the class definition and inheritance.\n" -"[b]Note:[/b] Unlike other annotations, the argument of the [annotation @icon] " -"annotation must be a string literal (constant expressions are not supported)." -msgstr "" -"Añade un icono personalizado al script actual. El icono especificado en " -"[param icon_path] se muestra en el panel de la Escena por cada nodo de esa " -"clase, así como en varios diálogos de edición.\n" -"[codeblock]\n" -"@icon(\"res://path/to/class/icon.svg\")\n" -"[/codeblock]\n" -"[b]Nota:[/b] Solo el script puede tener un icono personalizado. Las clases " -"internas no están soportadas.\n" -"[b]Nota:[/b] Como las anotaciones describen su tema, la anotación " -"[code]@icon[/code] se debe poner antes de definir la clase y su herencia.\n" -"[b]Nota:[/b] A diferencia de otras anotaciones, el argumento de la anotación " -"[code]@icon[/code] debe ser un literal de cadena (las expresiones constantes " -"no están soportadas)." - -msgid "" -"Mark the following property as assigned when the [Node] is ready. Values for " -"these properties are not assigned immediately when the node is initialized " -"([method Object._init]), and instead are computed and stored right before " -"[method Node._ready].\n" -"[codeblock]\n" -"@onready var character_name: Label = $Label\n" -"[/codeblock]" -msgstr "" -"Marcar la siguiente propiedad como asignada cuando el [Node] esté listo. Los " -"valores para esas propiedades no son asignadas inmediatamente cuando el nodo " -"([method Object._init]) es inicializado, y en su lugar son computadas y " -"almacenadas justo antes de [method Node._ready].\n" -"[codeblock]\n" -"@onready var character_name: Label = $Label\n" -"[/codeblock]" - msgid "" "Make a script with static variables to not persist after all references are " "lost. If the script is loaded again the static variables will revert to their " @@ -1152,50 +935,9 @@ msgstr "" "[b]Nota:[/b] Como las anotaciones describen sus sujetos, la [annotation " "@tool]debe ser colocada antes de la definición de clase y herencia." -msgid "" -"Mark the following statement to ignore the specified [param warning]. See " -"[url=$DOCS_URL/tutorials/scripting/gdscript/warning_system.html]GDScript " -"warning system[/url].\n" -"[codeblock]\n" -"func test():\n" -" print(\"hello\")\n" -" return\n" -" @warning_ignore(\"unreachable_code\")\n" -" print(\"unreachable\")\n" -"[/codeblock]" -msgstr "" -"Marca la siguiente declaración para ignorar el [param warning] especificado. " -"Vea\n" -"[url=$DOCS_URL/tutorials/scripting/gdscript/warning_system.html]GDScript " -"warning system[/url].\n" -"[codeblock]\n" -". . . .func test():\n" -". . . .print(\"hola\")\n" -". . . .return\n" -". . . .@warning_ignore(\"unreachable_code\")\n" -"print(\"unreachable\")\n" -"[/codeblock]" - msgid "Global scope constants and functions." msgstr "Constantes de ámbito global y funciones." -msgid "" -"A list of global scope enumerated constants and built-in functions. This is " -"all that resides in the globals, constants regarding error codes, keycodes, " -"property hints, etc.\n" -"Singletons are also documented here, since they can be accessed from " -"anywhere.\n" -"For the entries related to GDScript which can be accessed in any script see " -"[@GDScript]." -msgstr "" -"Una lista de alcance global de constantes y funciones internas enumeradas. " -"Esto es todo lo que reside en el ámbito global, las constantes de los códigos " -"de error, los códigos de teclas, las sugerencias de propiedades, etc.\n" -"Los singletons también están documentados aquí, ya que se puede acceder a " -"ellos desde cualquier lugar.\n" -"Para entradas relacionadas a GDScript a las cuales se pueden acceder en " -"cualquier script, vea [@GDScript]." - msgid "Random number generation" msgstr "Generación de números aleatorios" @@ -1218,16 +960,6 @@ msgstr "" "c = acos(0.866025)\n" "[/codeblock]" -msgid "" -"Returns the difference between the two angles, in the range of [code][-PI, " -"+PI][/code]. When [param from] and [param to] are opposite, returns [code]-" -"PI[/code] if [param from] is smaller than [param to], or [code]PI[/code] " -"otherwise." -msgstr "" -"Devuelve la diferencia entre dos ángulos, entre [code][-PI,+PI][/code]. " -"Cuando [param from] y [param to] son contrarios, devuelve [code]-PI[/code] si " -"[param from] es menor que [param to], o [code]PI[/code] si no lo es." - msgid "" "Returns the hyperbolic arc (also called inverse) tangent of [param x], " "returning a value in radians. Use it to get the angle from an angle's tangent " @@ -1341,24 +1073,6 @@ msgstr "" msgid "Converts from decibels to linear energy (audio)." msgstr "Convierte de decibelios a energía lineal (audio)." -msgid "" -"Returns a human-readable name for the given [enum Error] code.\n" -"[codeblock]\n" -"print(OK) # Prints 0\n" -"print(error_string(OK)) # Prints OK\n" -"print(error_string(ERR_BUSY)) # Prints Busy\n" -"print(error_string(ERR_OUT_OF_MEMORY)) # Prints Out of memory\n" -"[/codeblock]" -msgstr "" -"Devuelve un nombre entendible para los humanos para el siguiente código [enum " -"Error].\n" -"[codeblock]\n" -"print(OK) # Prints 0\n" -"print(error_string(OK)) # Prints OK\n" -"print(error_string(ERR_BUSY)) # Prints Busy\n" -"print(error_string(ERR_OUT_OF_MEMORY)) # Prints Out of memory\n" -"[/codeblock]" - msgid "" "Rounds [param x] downward (towards negative infinity), returning the largest " "whole number that is not more than [param x].\n" @@ -1462,91 +1176,6 @@ msgstr "" "pingpong(6.0, 3.0) # Devuelve 0.0\n" "[/codeblock]" -msgid "" -"Converts one or more arguments of any type to string in the best way possible " -"and prints them to the console.\n" -"The following BBCode tags are supported: [code]b[/code], [code]i[/code], " -"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], " -"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/" -"code], [code]bgcolor[/code], [code]fgcolor[/code].\n" -"Color tags only support the following named colors: [code]black[/code], " -"[code]red[/code], [code]green[/code], [code]yellow[/code], [code]blue[/code], " -"[code]magenta[/code], [code]pink[/code], [code]purple[/code], [code]cyan[/" -"code], [code]white[/code], [code]orange[/code], [code]gray[/code]. " -"Hexadecimal color codes are not supported.\n" -"URL tags only support URLs wrapped by a URL tag, not URLs with a different " -"title.\n" -"When printing to standard output, the supported subset of BBCode is converted " -"to ANSI escape codes for the terminal emulator to display. Support for ANSI " -"escape codes varies across terminal emulators, especially for italic and " -"strikethrough. In standard output, [code]code[/code] is represented with " -"faint text but without any font change. Unsupported tags are left as-is in " -"standard output.\n" -"[codeblocks]\n" -"[gdscript skip-lint]\n" -"print_rich(\"[color=green][b]Hello world![/b][/color]\") # Prints out \"Hello " -"world!\" in green with a bold font\n" -"[/gdscript]\n" -"[csharp skip-lint]\n" -"GD.PrintRich(\"[color=green][b]Hello world![/b][/color]\"); // Prints out " -"\"Hello world!\" in green with a bold font\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to " -"print error and warning messages instead of [method print] or [method " -"print_rich]. This distinguishes them from print messages used for debugging " -"purposes, while also displaying a stack trace when an error or warning is " -"printed.\n" -"[b]Note:[/b] On Windows, only Windows 10 and later correctly displays ANSI " -"escape codes in standard output.\n" -"[b]Note:[/b] Output displayed in the editor supports clickable [code skip-" -"lint][url=address]text[/url][/code] tags. The [code skip-lint][url][/code] " -"tag's [code]address[/code] value is handled by [method OS.shell_open] when " -"clicked." -msgstr "" -"Convierte uno o más argumentos de cualquier tipo en una cadena de la mejor " -"manera posible y los imprime en la consola.\n" -"Se admiten las siguientes etiquetas BBCode: [code]b[/code], [code]i[/code], " -"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], " -"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/" -"code], [code]bgcolor[/code], [code]fgcolor[/code].\n" -"Las etiquetas de color solo admiten los siguientes nombres de colores: " -"[code]black[/code], [code]red[/code], [code]green[/code], [code]yellow[/" -"code], [code]blue[/code], [code]magenta[/code], [code]pink[/code], " -"[code]purple[/code], [code]cyan[/code], [code]white[/code], [code]orange[/" -"code], [code]gray[/code]. No se cuenta con soporte para códigos de color " -"hexadecimales.\n" -"Las etiquetas URL solo admiten URL envueltas por una etiqueta URL, no así URL " -"con un título diferente.\n" -"Al imprimir en la salida estándar, el subconjunto compatible de BBCode se " -"convierte en códigos de escape ANSI para que el emulador de terminal los " -"muestre. La compatibilidad con los códigos de escape ANSI varía entre los " -"emuladores de terminal, especialmente para cursiva y tachado. En la salida " -"estándar, [code]code[/code] se representa con texto tenue pero sin ningún " -"cambio de fuente. Las etiquetas no compatibles se dejan tal como están en la " -"salida estándar.\n" -"[codeblocks]\n" -"[gdscript skip-lint]\n" -"print_rich(\"[color=green][b]¡Hola mundo![/b][/color]\") # Imprime \"¡Hola " -"mundo!\" en verde con una fuente en negrita\n" -"[/gdscript]\n" -"[csharp skip-lint]\n" -"GD.PrintRich(\"[color=green][b]¡Hola mundo![/b][/color]\"); // Imprime " -"\"¡Hola mundo!\" en verde con una fuente en negrita\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nota:[/b] Considere usar [method push_error] y [method push_warning] para " -"imprimir mensajes de error y advertencia en lugar de [method print] o [method " -"print_rich]. Esto los distingue de los mensajes de impresión utilizados para " -"fines de depuración, mientras que también muestra un seguimiento de la pila " -"cuando se imprime un error o una advertencia.\n" -"[b]Nota:[/b] En Windows, solo Windows 10 y versiones posteriores muestran " -"correctamente los códigos de escape ANSI en la salida estándar.\n" -"[b]Nota:[/b] La salida que se muestra en el editor admite etiquetas [code " -"skip-lint][url=address]texto[/url][/code] en las que se puede hacer clic. El " -"valor [code]address[/code] de la etiqueta [code skip-lint][url][/code] es " -"manejado por [method OS.shell_open] cuando se hace clic en ella." - msgid "" "If verbose mode is enabled ([method OS.is_stdout_verbose] returning " "[code]true[/code]), converts one or more arguments of any type to string in " @@ -1557,56 +1186,6 @@ msgstr "" "argumentos de cualquier tipo en una cadena de la mejor manera posible y los " "imprime en la consola." -msgid "" -"Prints one or more arguments to the console with a space between each " -"argument.\n" -"[codeblocks]\n" -"[gdscript]\n" -"prints(\"A\", \"B\", \"C\") # Prints A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintS(\"A\", \"B\", \"C\"); // Prints A B C\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Imprime uno o más argumentos en la consola con un espacio entre cada " -"argumento.\n" -"[codeblock]\n" -"[gdscript]\n" -"prints(\"A\", \"B\", \"C\") # Imprime A B C\n" -"[/gdscript]\n" -"GD.PrintS(\"A\",\"B\",\"C\");//Imprime A B C\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Given a [param seed], returns a [PackedInt64Array] of size [code]2[/code], " -"where its first element is the randomized [int] value, and the second element " -"is the same as [param seed]. Passing the same [param seed] consistently " -"returns the same array.\n" -"[b]Note:[/b] \"Seed\" here refers to the internal state of the pseudo random " -"number generator, currently implemented as a 64 bit integer.\n" -"[codeblock]\n" -"var a = rand_from_seed(4)\n" -"\n" -"print(a[0])\t# Prints 2879024997\n" -"print(a[1])\t# Prints 4\n" -"[/codeblock]" -msgstr "" -"dado un [param seed], retorna un [PackedInt64Array] de tamaño [code]2[/code], " -"donde su primer elemento es el valor aleatorizado [int], y el segundo " -"elemento es el mismo que [param seed]. Pasar el mismo [param seed] " -"consistentemente retorna el mismo array.\n" -"[b]Nota:[/b] \"Semila\" Aquí se refiere al estado interno del generador de " -"numeros pseudo aleatorio, en este momento implementado como un entero de 64 " -"bits.\n" -"[codeblock]\n" -"var a = rand_from_seed(4)\n" -"\n" -"print(a[0]\t)# Prints 2879024997\n" -"print(a[1])\t# Prints 4\n" -"[/codeblock]" - msgid "" "Randomizes the seed (or the internal state) of the random number generator. " "The current implementation uses a number based on the device's time.\n" @@ -1664,6 +1243,21 @@ msgstr "" "Crea un RID a partir de un [param base]. Esto es usado principalmente por " "extensiones nativas para la constricción de servidores." +msgid "" +"Rotates [param from] toward [param to] by the [param delta] amount. Will not " +"go past [param to].\n" +"Similar to [method move_toward], but interpolates correctly when the angles " +"wrap around [constant @GDScript.TAU].\n" +"If [param delta] is negative, this function will rotate away from [param to], " +"toward the opposite angle, and will not go past the opposite angle." +msgstr "" +"Gira [param from] hacia [param to] en la cantidad de [param delta]. No pasará " +"de [param to].\n" +"Similar al [método move_toward], pero se interpola correctamente cuando los " +"ángulos se ajustan a [constante @GDScript.TAU].\n" +"Si [param delta] es negativo, esta función se alejará de [param to], hacia el " +"ángulo opuesto y no pasará del ángulo opuesto." + msgid "" "Rounds [param x] to the nearest whole number, with halfway cases rounded away " "from 0. Supported types: [int], [float], [Vector2], [Vector2i], [Vector3], " @@ -1708,6 +1302,140 @@ msgstr "" "redondeados a partir de 0.\n" "Es una version de tipado seguro del [method round] , retorna un [int]." +msgid "" +"Sets the seed for the random number generator to [param base]. Setting the " +"seed manually can ensure consistent, repeatable results for most random " +"functions.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var my_seed = \"Godot Rocks\".hash()\n" +"seed(my_seed)\n" +"var a = randf() + randi()\n" +"seed(my_seed)\n" +"var b = randf() + randi()\n" +"# a and b are now identical\n" +"[/gdscript]\n" +"[csharp]\n" +"ulong mySeed = (ulong)GD.Hash(\"Godot Rocks\");\n" +"GD.Seed(mySeed);\n" +"var a = GD.Randf() + GD.Randi();\n" +"GD.Seed(mySeed);\n" +"var b = GD.Randf() + GD.Randi();\n" +"// a and b are now identical\n" +"[/csharp]\n" +"[/codeblocks]" +msgstr "" +"Establece la semilla para el generador de números aleatorios en [param base]. " +"Configurar la semilla manualmente puede garantizar resultados consistentes y " +"repetibles para la mayoría de los casos aleatorios. functions.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var my_seed = \"Godot Rocks\".hash()\n" +"seed(my_seed)\n" +"var a = randf() + randi()\n" +"seed(my_seed)\n" +"var b = randf() + randi()\n" +"# a and b are now identical\n" +"[/gdscript]\n" +"[csharp]\n" +"ulong mySeed = (ulong)GD.Hash(\"Godot Rocks\");\n" +"GD.Seed(mySeed);\n" +"var a = GD.Randf() + GD.Randi();\n" +"GD.Seed(mySeed);\n" +"var b = GD.Randf() + GD.Randi();\n" +"// a and b are now identical\n" +"[/csharp]\n" +"[/codeblocks]" + +msgid "" +"Returns the same type of [Variant] as [param x], with [code]-1[/code] for " +"negative values, [code]1[/code] for positive values, and [code]0[/code] for " +"zeros. For [code]nan[/code] values it returns 0.\n" +"Supported types: [int], [float], [Vector2], [Vector2i], [Vector3], " +"[Vector3i], [Vector4], [Vector4i].\n" +"[codeblock]\n" +"sign(-6.0) # Returns -1\n" +"sign(0.0) # Returns 0\n" +"sign(6.0) # Returns 1\n" +"sign(NAN) # Returns 0\n" +"\n" +"sign(Vector3(-6.0, 0.0, 6.0)) # Returns (-1, 0, 1)\n" +"[/codeblock]\n" +"[b]Note:[/b] For better type safety, use [method signf], [method signi], " +"[method Vector2.sign], [method Vector2i.sign], [method Vector3.sign], [method " +"Vector3i.sign], [method Vector4.sign], or [method Vector4i.sign]." +msgstr "" +"Devuelve el mismo [Variant] como [param x], dando [code]-1[/code] para " +"valores negativos, [code]1[/code] para valores positivos y [code]0[/code] " +"para cero. Para los valores [code]NaN[/code] (No es un Numero) devuelve " +"cero.\n" +"Tipos soportados [int], [float], [Vector2], [Vector2i], [Vector3], " +"[Vector3i], [Vector4], [Vector4i].\n" +"[codeblock]\n" +"sign(-6.0) # Devuelve-1\n" +"sign(0.0) # Devuelve 0\n" +"sign(6.0) # Devuelve 1\n" +"sign(NAN) # Devuelve 0\n" +"\n" +"sign(Vector3(-6.0, 0.0, 6.0)) # Devuelve (-1, 0, 1)\n" +"[/codeblock]\n" +"[b]Nota[/b] Para mejor seguridad en los tipos, use [method signf], [method " +"signi], [method Vector2.sign], [method Vector2i.sign], [method Vector3.sign], " +"[method Vector3i.sign], [method Vector4.sign], o [method Vector4i.sign]." + +msgid "" +"Converts the given [param variant] to the given [param type], using the [enum " +"Variant.Type] values. This method is generous with how it handles types, it " +"can automatically convert between array types, convert numeric [String]s to " +"[int], and converting most things to [String].\n" +"If the type conversion cannot be done, this method will return the default " +"value for that type, for example converting [Rect2] to [Vector2] will always " +"return [constant Vector2.ZERO]. This method will never show error messages as " +"long as [param type] is a valid Variant type.\n" +"The returned value is a [Variant], but the data inside and its type will be " +"the same as the requested type.\n" +"[codeblock]\n" +"type_convert(\"Hi!\", TYPE_INT) # Returns 0\n" +"type_convert(\"123\", TYPE_INT) # Returns 123\n" +"type_convert(123.4, TYPE_INT) # Returns 123\n" +"type_convert(5, TYPE_VECTOR2) # Returns (0, 0)\n" +"type_convert(\"Hi!\", TYPE_NIL) # Returns null\n" +"[/codeblock]" +msgstr "" +"Convierte un [param variant] dado a [param type], usando los valores de [enum " +"Variant.Type]. Este método es amigable con como maneja los tipos, puede " +"convertir automáticamente entre tipos de array, convertir [String]s numéricos " +"a [Int] y convertir la gran mayoría de cosas a [String].\n" +"Si no se puede pasar de un tipo a otro, este método devolverá el valor por " +"defecto de ese tipo, por ejemplo, convertir un [Rect2] a [Vector2] siempre " +"devolverá [constant Vector2.ZERO]. Este método no muestra mensajes de error " +"siempre que [param type] sea un tipo valido.\n" +"El valor devuelto es [Variant], pero su tipo y datos serán iguales que el que " +"se pidió.\n" +"[codeblock]\n" +"type_convert(\"Hi!\", TYPE_INT) # Devuelve 0\n" +"type_convert(\"123\", TYPE_INT) # Devuelve 123\n" +"type_convert(123.4, TYPE_INT) # Devuelve 123\n" +"type_convert(5, TYPE_VECTOR2) # Devuelve (0, 0)\n" +"type_convert(\"Hi!\", TYPE_NIL) # Devuelve null\n" +"[/codeblock]" + +msgid "" +"Encodes a [Variant] value to a byte array, without encoding objects. " +"Deserialization can be done with [method bytes_to_var].\n" +"[b]Note:[/b] If you need object serialization, see [method " +"var_to_bytes_with_objects].\n" +"[b]Note:[/b] Encoding [Callable] is not supported and will result in an empty " +"value, regardless of the data." +msgstr "" +"Cifra el valor de [Variant] a un array de bytes (byte array) sin encodificar " +"el objeto en si. La deserialización puede ser hecha con [method " +"bytes_to_var].\n" +"[b]Nota:[/b] Si necesitas serializar el objeto, lease [method " +"var_to_bytes_with_objects].\n" +"[b]Nota:[/b] La encodificación de [Callable] no esta soportada y siempre " +"devolverá un valor vacío, sin importar los datos." + msgid "The [AudioServer] singleton." msgstr "El singleton [AudioServer]." @@ -1942,6 +1670,50 @@ msgstr "Tecla F15." msgid "F16 key." msgstr "Tecla F16." +msgid "F25 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F25. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F26 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F26. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F27 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F27. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F28 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F28. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F29 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F29. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F30 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F30. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F31 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F31. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F32 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F32. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F33 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F33. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F34 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F34. Solo soportada en macOS y Linux por las limitaciones de Windows." + +msgid "F35 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Tecla F35. Solo soportada en macOS y Linux por las limitaciones de Windows." + msgid "Multiply (*) key on the numeric keypad." msgstr "Tecla Multiplicar(*) del teclado numérico." @@ -1990,15 +1762,12 @@ msgstr "Tecla 9 del teclado numérico." msgid "Context menu key." msgstr "Tecla Menu Contexto." +msgid "Hyper key. (On Linux/X11 only)." +msgstr "Tecla Hyper. (En Linux/X11 solo)." + msgid "Help key." msgstr "Tecla Ayuda." -msgid "" -"Media back key. Not to be confused with the Back button on an Android device." -msgstr "" -"Tecla para atrás en multimedia. No confundirlo con el botón hacia atrás en un " -"dispositivo Android." - msgid "Media stop key." msgstr "Tecla reproduccion parar." @@ -2098,71 +1867,35 @@ msgstr "Tecla desconocida." msgid "Space key." msgstr "Tecla Espaciado." -msgid "! key." -msgstr "Tecla !." - -msgid "\" key." -msgstr "Tecla \"." - -msgid "# key." -msgstr "Tecla #." - -msgid "$ key." -msgstr "Tecla $." - -msgid "% key." -msgstr "Tecla %." - -msgid "& key." -msgstr "Tecla &." +msgid "Number 0 key." +msgstr "Techa numérica 0." -msgid "' key." -msgstr "Tecla '." +msgid "Number 1 key." +msgstr "Techa numérica 1." -msgid "( key." -msgstr "Tecla (." +msgid "Number 2 key." +msgstr "Techa numérica 2." -msgid ") key." -msgstr "Tecla )." +msgid "Number 3 key." +msgstr "Techa numérica 3." -msgid "* key." -msgstr "Tecla *." +msgid "Number 4 key." +msgstr "Techa numérica 4." -msgid "+ key." -msgstr "Tecla +." +msgid "Number 5 key." +msgstr "Techa numérica 5." -msgid ", key." -msgstr "Tecla ,." +msgid "Number 6 key." +msgstr "Techa numérica 6." -msgid "- key." -msgstr "Tecla -." +msgid "Number 7 key." +msgstr "Techa numérica 7." -msgid ". key." -msgstr "Tecla .." +msgid "Number 8 key." +msgstr "Techa numérica 8." -msgid "/ key." -msgstr "Tecla /." - -msgid ": key." -msgstr "Tecla :." - -msgid "; key." -msgstr "Tecla ;." - -msgid "< key." -msgstr "Tecla <." - -msgid "= key." -msgstr "Tecla =." - -msgid "> key." -msgstr "Tecla >." - -msgid "? key." -msgstr "Tecla ?." - -msgid "@ key." -msgstr "Tecla @." +msgid "Number 9 key." +msgstr "Techa numérica 9." msgid "A key." msgstr "Tecla A." @@ -2242,42 +1975,6 @@ msgstr "Tecla Y." msgid "Z key." msgstr "Tecla Z." -msgid "[ key." -msgstr "Tecla [." - -msgid "\\ key." -msgstr "Tecla \\." - -msgid "] key." -msgstr "Tecla ]." - -msgid "^ key." -msgstr "Tecla ^." - -msgid "_ key." -msgstr "Tecla _." - -msgid "` key." -msgstr "Tecla `." - -msgid "{ key." -msgstr "Tecla {." - -msgid "| key." -msgstr "Tecla |." - -msgid "} key." -msgstr "Tecla }." - -msgid "~ key." -msgstr "Tecla ~." - -msgid "¥ key." -msgstr "Tecla ¥." - -msgid "§ key." -msgstr "Tecla §." - msgid "Key Code mask." msgstr "Tecla máscara codigo." @@ -2458,13 +2155,6 @@ msgstr "" "Al editar la propiedad, el usuario debe reiniciar el editor para que el " "cambio tenga efecto." -msgid "" -"The property is a script variable which should be serialized and saved in the " -"scene file." -msgstr "" -"La propiedad es un script variable que debe ser serializado y guardado en el " -"archivo de la escena." - msgid "Flag for a normal method." msgstr "Flag para un método normal." @@ -3239,9 +2929,6 @@ msgstr "" "El grado de reverberación de esta área es un efecto uniforme. Va de [code]0[/" "code] a [code]1[/code] con una precisión de [code]0,1[/code]." -msgid "Returns the number of times an element is in the array." -msgstr "Devuelve el numer de veces que un elemento es encuentra en el array." - msgid "" "[Mesh] type that provides utility for constructing a surface from arrays." msgstr "" @@ -4154,38 +3841,12 @@ msgstr "Desactiva el rastreo doppler." msgid "Stores audio data loaded from WAV files." msgstr "Almacena datos de audio cargados desde archivos WAV." -msgid "" -"Contains the audio data in bytes.\n" -"[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned PCM8 " -"to signed PCM8, subtract 128 from each byte." -msgstr "" -"Contiene los datos de audio en bytes.\n" -"[b]Nota:[/b] Esta propiedad espera datos firmados de PCM8. Para convertir " -"PCM8 sin firmar en PCM8 firmado, reste 128 de cada byte." - msgid "Audio format. See [enum Format] constants for values." msgstr "Formato de audio. Véase las constantes [enum Format] para los valores." -msgid "" -"The loop mode. This information will be imported automatically from the WAV " -"file if present. See [enum LoopMode] constants for values." -msgstr "" -"El modo de bucle. Esta información se importará automáticamente desde el " -"archivo WAV si está presente. Ver las constantes [enum LoopMode] para los " -"valores." - msgid "If [code]true[/code], audio is stereo." msgstr "Si [code]true[/code], el audio es estéreo." -msgid "8-bit audio codec." -msgstr "Códec de audio de 8 bits." - -msgid "16-bit audio codec." -msgstr "Códec de audio de 16 bits." - -msgid "Audio is compressed using IMA ADPCM." -msgstr "El audio se comprime usando IMA ADPCM." - msgid "Audio does not loop." msgstr "El audio no se reproduce en bucle." @@ -4272,13 +3933,6 @@ msgstr "" "emitirán señales en el mismo momento sin tener en cuenta el valor de esta " "propiedad." -msgid "" -"If [code]true[/code], the button will add information about its shortcut in " -"the tooltip." -msgstr "" -"Si [code]true[/code], el botón añadirá información sobre su atajo en el " -"mensaje de ayuda." - msgid "" "If [code]true[/code], the button is in toggle mode. Makes the button flip " "state between pressed and unpressed each time its area is clicked." @@ -4935,14 +4589,6 @@ msgstr "Número de bucles de borde extra insertados a lo largo del eje Y." msgid "Number of extra edge loops inserted along the X axis." msgstr "Número de bucles de borde extra insertados a lo largo del eje X." -msgid "" -"When this property is enabled, text that is too large to fit the button is " -"clipped, when disabled the Button will always be wide enough to hold the text." -msgstr "" -"Cuando esta propiedad está activada, el texto que es demasiado grande para " -"caber en el botón se recorta, cuando está desactivada el botón siempre será " -"lo suficientemente ancho para contener el texto." - msgid "Flat buttons don't display decoration." msgstr "Los botones planos no muestran decoración." @@ -5294,12 +4940,6 @@ msgstr "" "padre. Si el índice Z de este nodo es 2 y el índice Z efectivo de su padre es " "3, entonces el índice Z efectivo de este nodo será 2 + 3 = 5." -msgid "Emitted when becoming hidden." -msgstr "Emitido al ocultarse." - -msgid "Emitted when the visibility (hidden/visible) changes." -msgstr "Emitido cuando la visibilidad (oculta/visible) cambia." - msgid "The [CanvasItem]'s visibility has changed." msgstr "La visibilidad del [CanvasItem] ha cambiado." @@ -5517,9 +5157,6 @@ msgstr "" msgid "Returns the names of all the classes available." msgstr "Devuelve los nombres de todas las clases disponibles." -msgid "Returns whether the line at the specified index is folded or not." -msgstr "Devuelve si la línea del índice especificado está doblado o no." - msgid "Toggle the folding of the code block at the given line." msgstr "Cambia el plegado del bloque de código en la línea dada." @@ -6624,29 +6261,6 @@ msgstr "Sistemas de partículas (2D)" msgid "Returns the [Curve] of the parameter specified by [enum Parameter]." msgstr "Devuelve la [Curve] del parámetro especificado por [enum Parameter]." -msgid "Restarts the particle emitter." -msgstr "Reinicia el emisor de partículas." - -msgid "Sets the [Curve] of the parameter specified by [enum Parameter]." -msgstr "Establece la [Curve] del parámetro especificado por [enum Parameter]." - -msgid "Each particle's rotation will be animated along this [Curve]." -msgstr "La rotación de cada partícula será animada a lo largo de esta [Curve]." - -msgid "Each particle's angular velocity will vary along this [Curve]." -msgstr "" -"La velocidad angular de cada partícula variará a lo largo de esta [Curve]." - -msgid "Each particle's animation offset will vary along this [Curve]." -msgstr "" -"El desplazamiento de la animación de cada partícula variará a lo largo de " -"esta [Curve]." - -msgid "Each particle's animation speed will vary along this [Curve]." -msgstr "" -"La velocidad de animación de cada partícula variará a lo largo de esta " -"[Curve]." - msgid "" "Each particle's initial color. If [member texture] is defined, it will be " "multiplied by this color." @@ -6654,9 +6268,6 @@ msgstr "" "El color inicial de cada partícula. Si se define [member texture], se " "multiplicará por este color." -msgid "Damping will vary along this [Curve]." -msgstr "La amortiguación variará a lo largo de esta [Curve]." - msgid "Unit vector specifying the particles' emission direction." msgstr "" "Vector unitario que especifica la dirección de emisión de las partículas." @@ -6725,16 +6336,9 @@ msgstr "" msgid "Gravity applied to every particle." msgstr "La gravedad aplicada a cada partícula." -msgid "Each particle's hue will vary along this [Curve]." -msgstr "El tono de cada partícula variará a lo largo de esta [Curve]." - msgid "Particle lifetime randomness ratio." msgstr "El ratio de aleatoriedad del tiempo de vida de las partículas." -msgid "Each particle's linear acceleration will vary along this [Curve]." -msgstr "" -"La aceleración lineal de cada partícula variará a lo largo de esta [Curve]." - msgid "" "If [code]true[/code], only one emission cycle occurs. If set [code]true[/" "code] during a cycle, emission will stop at the cycle's end." @@ -6742,10 +6346,6 @@ msgstr "" "Si [code]true[/code], sólo se produce un ciclo de emisión. Si se establece " "[code]true[/code] durante un ciclo, la emisión se detendrá al final del ciclo." -msgid "Each particle's orbital velocity will vary along this [Curve]." -msgstr "" -"La velocidad orbital de cada partícula variará a lo largo de esta [Curve]." - msgid "Align Y axis of particle with the direction of its velocity." msgstr "Alinea el eje Y de la partícula con la dirección de su velocidad." @@ -6754,16 +6354,9 @@ msgstr "" "El sistema de partículas se inicia como si ya hubiera funcionado durante este " "número de segundos." -msgid "Each particle's radial acceleration will vary along this [Curve]." -msgstr "" -"La aceleración radial de cada partícula variará a lo largo de esta [Curve]." - msgid "Emission lifetime randomness ratio." msgstr "Proporción de aleatoriedad de la vida útil de las emisiones." -msgid "Each particle's scale will vary along this [Curve]." -msgstr "Escala inicial aplicada a cada partícula." - msgid "" "Particle system's running speed scaling ratio. A value of [code]0[/code] can " "be used to pause the particles." @@ -6778,11 +6371,6 @@ msgstr "" "La dirección inicial de cada partícula va desde [code]+spread[/code] hasta " "[code]-spread[/code] grados." -msgid "Each particle's tangential acceleration will vary along this [Curve]." -msgstr "" -"La aceleración tangencial de cada partícula variará a lo largo de esta " -"[Curve]." - msgid "Particle texture. If [code]null[/code], particles will be squares." msgstr "" "La textura de las partículas. Si [code]null[/code], las partículas serán " @@ -6834,6 +6422,13 @@ msgstr "" msgid "Represents the size of the [enum EmissionShape] enum." msgstr "Representa el tamaño del enum [enum EmissionShape]." +msgid "" +"Returns the axis-aligned bounding box that contains all the particles that " +"are active in the current frame." +msgstr "" +"Devuelve el cuadro delimitador alineado con el eje que contiene todas las " +"partículas que están activas en el cuadro actual." + msgid "Maximum angle." msgstr "Ángulo máximo." @@ -7069,12 +6664,6 @@ msgstr "" "El número de puntos a incluir en los datos de la curva cocinados (es decir, " "en caché)." -msgid "The maximum value the curve can reach." -msgstr "El valor máximo que puede alcanzar la curva." - -msgid "The minimum value the curve can reach." -msgstr "El valor mínimo que la curva puede alcanzar." - msgid "Emitted when [member max_value] or [member min_value] is changed." msgstr "Emitido cuando se cambia [member max_value] o [member min_value]." @@ -7348,9 +6937,6 @@ msgstr "" msgid "A modified version of [FileDialog] used by the editor." msgstr "Una versión modificada de [FileDialog] utilizada por el editor." -msgid "Removes all filters except for \"All Files (*)\"." -msgstr "Elimina todos los filtros excepto el de \"Todos los archivos (*)\"." - msgid "" "Notify the [EditorFileDialog] that its view of the data is no longer " "accurate. Updates the view contents on next view update." @@ -7657,9 +7243,6 @@ msgstr "" "code] en caso contrario. Las escenas en pausa se consideran como si " "estuvieran siendo reproducidas." -msgid "Opens the scene at the given path." -msgstr "Abre la escena en de la ruta dada." - msgid "Plays the currently active scene." msgstr "Reproduce la escena actualmente activa." @@ -7960,15 +7543,6 @@ msgstr "Elimina un generador de previsualización personalizado." msgid "Custom generator of previews." msgstr "Generador personalizado de vistas previas." -msgid "" -"Custom code to generate previews. Please check [code]file_dialog/" -"thumbnail_size[/code] in [EditorSettings] to find out the right size to do " -"previews at." -msgstr "" -"Código personalizado para generar vistas previas. Por favor, comprueba " -"[code]file_dialog/thumbnail_size[/code] en [EditorSettings] para saber el " -"tamaño adecuado para hacer las vistas previas." - msgid "Imports scenes from third-parties' 3D files." msgstr "Importa escenas de archivos 3D de terceros." @@ -8044,6 +7618,14 @@ msgstr "" "Establece la lista de carpetas visitadas recientemente en el diálogo de " "archivos de este proyecto." +msgid "" +"If [code]true[/code], keeps the screen on (even in case of inactivity), so " +"the screensaver does not take over. Works on desktop and mobile platforms." +msgstr "" +"Si [code]true[/code], mantiene la pantalla encendida (incluso en caso de " +"inactividad), por lo que el salvapantallas no toma el control. Funciona en " +"plataformas de escritorio y móviles." + msgid "Emitted after any editor setting has changed." msgstr "Emitido después de que cualquier ajuste del editor haya cambiado." @@ -8280,9 +7862,6 @@ msgstr "" msgid "Returns the next 32 bits from the file as a floating-point number." msgstr "Devuelve los siguientes 32 bits del archivo como un número real." -msgid "Returns the size of the file in bytes." -msgstr "Devuelve el tamaño del archivo en bytes." - msgid "" "Returns an MD5 String representing the file at the given path or an empty " "[String] on failure." @@ -8331,27 +7910,6 @@ msgstr "" "[b]Nota:[/b] Se trata de un desplazamiento, por lo que debe utilizar números " "negativos o el cursor estará al final del archivo." -msgid "Stores the given array of bytes in the file." -msgstr "Almacena el array de bytes dados en el archivo." - -msgid "Stores a floating-point number as 64 bits in the file." -msgstr "Almacena un número de punto flotante como 64 bits en el archivo." - -msgid "Stores a floating-point number as 32 bits in the file." -msgstr "Almacena un número de real como 32 bits en el archivo." - -msgid "" -"Stores the given [String] as a line in the file in Pascal format (i.e. also " -"store the length of the string).\n" -"Text will be encoded as UTF-8." -msgstr "" -"Almacena la [String] dada como una línea en el archivo en formato Pascal (es " -"decir, también almacena la longitud de la string).\n" -"El texto será codificado como UTF-8." - -msgid "Stores a floating-point number in the file." -msgstr "Almacena un número de real en el archivo." - msgid "" "Uses the [url=https://en.wikipedia.org/wiki/DEFLATE]DEFLATE[/url] compression " "method." @@ -8476,23 +8034,6 @@ msgstr "" msgid "A script implemented in the GDScript programming language." msgstr "Un guión implementado en el lenguaje de programación GDScript." -msgid "" -"Returns a new instance of the script.\n" -"For example:\n" -"[codeblock]\n" -"var MyClass = load(\"myclass.gd\")\n" -"var instance = MyClass.new()\n" -"assert(instance.get_script() == MyClass)\n" -"[/codeblock]" -msgstr "" -"Devuelve una nueva instancia del script.\n" -"Por ejemplo:\n" -"[codeblock]\n" -"var MiClase = load(\"miclase.gd\")\n" -"var instancia = MiClase.new()\n" -"assert(instancia.get_script() == MiClase)\n" -"[/codeblock]" - msgid "" "The amount of rotational damping across the X axis.\n" "The lower, the longer an impulse from one side takes to travel to the other " @@ -8995,13 +8536,6 @@ msgstr "" "En otras palabras, la malla real no será visible, sólo las sombras " "proyectadas desde la malla lo serán." -msgid "" -"Returns the axis-aligned bounding box that contains all the particles that " -"are active in the current frame." -msgstr "" -"Devuelve el cuadro delimitador alineado con el eje que contiene todas las " -"partículas que están activas en el cuadro actual." - msgid "[Mesh] that is drawn for the first draw pass." msgstr "[Mesh] que se dibuja para el primer pase de dibujado." @@ -9025,14 +8559,6 @@ msgstr "" "emiten continuamente. Si [code]1[/code], todas las partículas se emiten " "simultáneamente." -msgid "" -"Amount of time to preprocess the particles before animation starts. Lets you " -"start the animation some time after particles have started emitting." -msgstr "" -"Cantidad de tiempo para preprocesar las partículas antes de que comience la " -"animación. Te permite iniciar la animación un tiempo después de que las " -"partículas hayan empezado a emitir." - msgid "Emission randomness ratio." msgstr "Ratio de aleatoriedad de las emisiones." @@ -9277,35 +8803,9 @@ msgstr "" msgid "Returns the response's HTTP status code." msgstr "Devuelve el código de estado HTTP de la respuesta." -msgid "Returns the response headers." -msgstr "Devuelve las cabeceras de la respuesta." - -msgid "" -"Returns all response headers as a Dictionary of structure [code]{ \"key\": " -"\"value1; value2\" }[/code] where the case-sensitivity of the keys and values " -"is kept like the server delivers it. A value is a simple String, this string " -"can have more than one value where \"; \" is used as separator.\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"{\n" -" \"content-length\": 12,\n" -" \"Content-Type\": \"application/json; charset=UTF-8\",\n" -"}\n" -"[/codeblock]" -msgstr "" -"Devuelve todos los encabezados de respuesta como un diccionario de estructura " -"[code]{\"key\": \"value1; value2\" }[/code] donde la sensibilidad a " -"mayúsculas y minúsculas de las claves y valores se mantiene como el servidor " -"lo entrega. Un valor es una simple String, esta string puede tener más de un " -"valor donde \"; \" se utiliza como separador.\n" -"[b]Ejemplo:[/b]\n" -"[codeblock]\n" -"{\n" -" \"content-length\": 12,\n" -" \"Content-Type\": \"application/json; charset=UTF-8\",\n" -"}\n" -"[/codeblock]" - +msgid "Returns the response headers." +msgstr "Devuelve las cabeceras de la respuesta." + msgid "" "Returns a [enum Status] constant. Need to call [method poll] in order to get " "status updates." @@ -9483,23 +8983,6 @@ msgstr "" "servidor ha recibido y está procesando la solicitud, pero aún no hay " "respuesta disponible." -msgid "" -"HTTP status code [code]200 OK[/code]. The request has succeeded. Default " -"response for successful requests. Meaning varies depending on the request. " -"GET: The resource has been fetched and is transmitted in the message body. " -"HEAD: The entity headers are in the message body. POST: The resource " -"describing the result of the action is transmitted in the message body. " -"TRACE: The message body contains the request message as received by the " -"server." -msgstr "" -"Código de estado HTTP [code]200 OK[/code]. La petición ha tenido éxito. " -"Respuesta por defecto para las solicitudes con exito. El significado varía " -"dependiendo de la solicitud. GET: El recurso ha sido recuperado y se " -"transmite en el cuerpo del mensaje. HEAD: Las cabeceras de la entidad están " -"en el cuerpo del mensaje. POST: El recurso que describe el resultado de la " -"acción se transmite en el cuerpo del mensaje. TRACE: El cuerpo del mensaje " -"contiene el mensaje de solicitud tal y como lo recibió el servidor." - msgid "" "HTTP status code [code]201 Created[/code]. The request has succeeded and a " "new resource has been created as a result of it. This is typically the " @@ -10183,10 +9666,6 @@ msgstr "" "Convierte una imagen estándar RGBE (Red Green Blue Exponent) en una imagen " "sRGB." -msgid "Converts the raw data from the sRGB colorspace to a linear scale." -msgstr "" -"Convierte los datos en bruto del espacio de color sRGB a una escala lineal." - msgid "The maximal width allowed for [Image] resources." msgstr "El ancho máximo permitido para los recursos [Image]." @@ -10604,12 +10083,6 @@ msgstr "" "Devuelve la fuerza de la vibración del joypad: x es la fuerza del motor " "débil, e y es la fuerza del motor fuerte." -msgid "" -"Removes all mappings from the internal database that match the given GUID." -msgstr "" -"Elimina todos los mapeos de la base de datos interna que coincidan con la " -"GUID dada." - msgid "" "Sets the default cursor shape to be used in the viewport instead of [constant " "CURSOR_ARROW].\n" @@ -10966,8 +10439,8 @@ msgstr "" msgid "" "Invalid ID constant. Returned if [constant RESOLVER_MAX_QUERIES] is exceeded." msgstr "" -"Identificador de constante inválida. Devuelta si se supera el valor de la " -"constante RESOLVER_MAX_QUERIES" +"Constante de ID no válida. Se devuelve si se excede el valor [constante " +"RESOLVER_MAX_QUERIES]." msgid "Address type: None." msgstr "Tipo de dirección: Ninguna." @@ -11197,21 +10670,6 @@ msgstr "" "Permite la selección de uno o varios elementos. Vea las constantes [enum " "SelectMode]." -msgid "" -"Triggered when specified item has been selected.\n" -"[member allow_reselect] must be enabled to reselect an item." -msgstr "" -"Se activa cuando se selecciona un elemento específico.\n" -"Para poder volver a seleccionar un elemento, se debe activar la opción " -"[member allow_reselect]." - -msgid "" -"Triggered when a multiple selection is altered on a list allowing multiple " -"selection." -msgstr "" -"Se activa cuando se altera una selección múltiple en una lista que permite la " -"selección múltiple." - msgid "Icon is drawn above the text." msgstr "El icono se dibuja sobre el texto." @@ -11224,9 +10682,6 @@ msgstr "Sólo permite seleccionar un único elemento." msgid "Default text [Color] of the item." msgstr "[Color] del texto predeterminado del elemento." -msgid "Text [Color] used when the item is selected." -msgstr "[Color] del texto utilizado cuando se selecciona el elemento." - msgid "" "[Color] of the guideline. The guideline is a line drawn between each row of " "items." @@ -11311,9 +10766,6 @@ msgstr "[Color] del texto predeterminado de la [Label]." msgid "[Color] of the text's shadow effect." msgstr "[Color] del efecto de sombra del texto." -msgid "Vertical space between lines in multiline [Label]." -msgstr "Espacio vertical entre líneas en multilínea [Label]." - msgid "The horizontal offset of the text's shadow." msgstr "El desplazamiento horizontal de la sombra del texto." @@ -11493,6 +10945,12 @@ msgstr "Devuelve la columna de inicio de la selección." msgid "Returns the selection end column." msgstr "Devuelve la columna de final de selección." +msgid "Returns [code]true[/code] if a \"redo\" action is available." +msgstr "Devuelve [code]true[/code] si una acción de \"redo\" está disponible." + +msgid "Returns [code]true[/code] if an \"undo\" action is available." +msgstr "Devuelve [code]true[/code] si se dispone de una acción de \"deshacer\"." + msgid "Executes a given action as defined in the [enum MenuItems] enum." msgstr "" "Ejecuta una acción determinada según se define en el enum [enum MenuItems]." @@ -11551,8 +11009,12 @@ msgstr "" "Si [code]false[/code], es imposible seleccionar el texto usando el ratón o el " "teclado." -msgid "If [code]false[/code], using shortcuts will be disabled." -msgstr "Si [code]false[/code], el uso de atajos se desactivará." +msgid "" +"If [code]true[/code], shortcut keys for context menu items are enabled, even " +"if the context menu is disabled." +msgstr "" +"Si [code]true[/code], las teclas de atajo para los elementos del menú " +"contextual están habilitadas, incluso si el menú contextual está desactivado." msgid "" "String value of the [LineEdit].\n" @@ -11573,10 +11035,6 @@ msgstr "" msgid "Emitted when the text changes." msgstr "Emitido cuando el texto cambia." -msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]." -msgstr "" -"Emitido cuando el usuario presiona [constant KEY_ENTER] en la [LineEdit]." - msgid "Cuts (copies and clears) the selected text." msgstr "Corta (copia y borra) el texto seleccionado." @@ -12366,25 +11824,6 @@ msgstr "Notificación recibida cuando el nodo esté listo. Véase [method _ready msgid "Duplicate the node's groups." msgstr "Duplica los grupos del nodo." -msgid "" -"A 2D game object, inherited by all 2D-related nodes. Has a position, " -"rotation, scale, and Z index." -msgstr "" -"Un objeto de juego en 2D, heredado por todos los nodos relacionados con el " -"2D. Tiene una posición, rotación, escala e índice Z." - -msgid "" -"A 2D game object, with a transform (position, rotation, and scale). All 2D " -"nodes, including physics objects and sprites, inherit from Node2D. Use Node2D " -"as a parent node to move, scale and rotate children in a 2D project. Also " -"gives control of the node's render order." -msgstr "" -"Un objeto de juego 2D, con una transformada (posición, rotación y escala). " -"Todos los nodos 2D, incluyendo los objetos de física y los sprites, heredan " -"de Node2D. Utiliza Node2D como nodo padre para mover, escalar y rotar a los " -"niños en un proyecto 2D. También da control del orden de renderización del " -"nodo." - msgid "Returns the [Transform2D] relative to this node's parent." msgstr "Devuelve el [Transform2D] relativo al padre de este nodo." @@ -12422,24 +11861,6 @@ msgstr "" "nodos hijos, pero no es apropiado para determinar su propia posición en " "relación con su padre." -msgid "Global position." -msgstr "Posición global." - -msgid "Global rotation in radians." -msgstr "Rotación global en radianes." - -msgid "Global scale." -msgstr "Escala global." - -msgid "Global [Transform2D]." -msgstr "[Transform2D] Global." - -msgid "Position, relative to the node's parent." -msgstr "Posición, relativa al padre del nodo." - -msgid "Local [Transform2D]." -msgstr "[Transform2D] Local ." - msgid "Most basic 3D game object, parent of all 3D-related nodes." msgstr "" "El objeto de juego 3D más básico, padre de todos los nodos relacionados con " @@ -12677,120 +12098,6 @@ msgstr "" "los bump maps parezcan más grandes mientras que un valor más bajo los hará " "parecer más suaves." -msgid "" -"An advanced [Variant] type. All classes in the engine inherit from Object. " -"Each class may define new properties, methods or signals, which are available " -"to all inheriting classes. For example, a [Sprite2D] instance is able to call " -"[method Node.add_child] because it inherits from [Node].\n" -"You can create new instances, using [code]Object.new()[/code] in GDScript, or " -"[code]new GodotObject[/code] in C#.\n" -"To delete an Object instance, call [method free]. This is necessary for most " -"classes inheriting Object, because they do not manage memory on their own, " -"and will otherwise cause memory leaks when no longer in use. There are a few " -"classes that perform memory management. For example, [RefCounted] (and by " -"extension [Resource]) deletes itself when no longer referenced, and [Node] " -"deletes its children when freed.\n" -"Objects can have a [Script] attached to them. Once the [Script] is " -"instantiated, it effectively acts as an extension to the base class, allowing " -"it to define and inherit new properties, methods and signals.\n" -"Inside a [Script], [method _get_property_list] may be overridden to customize " -"properties in several ways. This allows them to be available to the editor, " -"display as lists of options, sub-divide into groups, save on disk, etc. " -"Scripting languages offer easier ways to customize properties, such as with " -"the [annotation @GDScript.@export] annotation.\n" -"Godot is very dynamic. An object's script, and therefore its properties, " -"methods and signals, can be changed at run-time. Because of this, there can " -"be occasions where, for example, a property required by a method may not " -"exist. To prevent run-time errors, see methods such as [method set], [method " -"get], [method call], [method has_method], [method has_signal], etc. Note that " -"these methods are [b]much[/b] slower than direct references.\n" -"In GDScript, you can also check if a given property, method, or signal name " -"exists in an object with the [code]in[/code] operator:\n" -"[codeblock]\n" -"var node = Node.new()\n" -"print(\"name\" in node) # Prints true\n" -"print(\"get_parent\" in node) # Prints true\n" -"print(\"tree_entered\" in node) # Prints true\n" -"print(\"unknown\" in node) # Prints false\n" -"[/codeblock]\n" -"Notifications are [int] constants commonly sent and received by objects. For " -"example, on every rendered frame, the [SceneTree] notifies nodes inside the " -"tree with a [constant Node.NOTIFICATION_PROCESS]. The nodes receive it and " -"may call [method Node._process] to update. To make use of notifications, see " -"[method notification] and [method _notification].\n" -"Lastly, every object can also contain metadata (data about data). [method " -"set_meta] can be useful to store information that the object itself does not " -"depend on. To keep your code clean, making excessive use of metadata is " -"discouraged.\n" -"[b]Note:[/b] Unlike references to a [RefCounted], references to an object " -"stored in a variable can become invalid without being set to [code]null[/" -"code]. To check if an object has been deleted, do [i]not[/i] compare it " -"against [code]null[/code]. Instead, use [method @GlobalScope." -"is_instance_valid]. It's also recommended to inherit from [RefCounted] for " -"classes storing data instead of [Object].\n" -"[b]Note:[/b] The [code]script[/code] is not exposed like most properties. To " -"set or get an object's [Script] in code, use [method set_script] and [method " -"get_script], respectively." -msgstr "" -"Un tipo [Variant] avanzado. Todas las clases del motor heredan de Object. " -"Cada clase puede definir nuevas propiedades, métodos o señales, que están " -"disponibles para todas las clases que heredan. Por ejemplo, una instancia " -"[Sprite2D] puede llamar a [method Node.add_child] porque hereda de [Node].\n" -"Puede crear nuevas instancias, utilizando [code]Object.new()[/code] en " -"GDScript, o [code]new GodotObject[/code] en C#.\n" -"Para eliminar una instancia de Object, llame a [method free]. Esto es " -"necesario para la mayoría de las clases que heredan Object, porque no " -"administran la memoria por sí mismas y, de lo contrario, causarán fugas de " -"memoria cuando ya no se utilicen. Hay algunas clases que realizan la " -"administración de la memoria. Por ejemplo, [RefCounted] (y por extensión " -"[Resource]) se elimina a sí misma cuando ya no se hace referencia a ella, y " -"[Node] elimina a sus hijos cuando se libera.\n" -"Object puede tener un [Script] adjunto. Una vez que se crea una instancia de " -"[Script], actúa efectivamente como una extensión de la clase base, lo que le " -"permite definir y heredar nuevas propiedades, métodos y señales.\n" -"Dentro de un [Script], [method _get_property_list] se puede anular para " -"personalizar las propiedades de varias maneras. Esto permite que estén " -"disponibles para el editor, se muestren como listas de opciones, se " -"subdividan en grupos, se guarden en el disco, etc. Los lenguajes de script " -"ofrecen formas más sencillas de personalizar las propiedades, como con la " -"anotación [annotation @GDScript.@export].\n" -"Godot es muy dinámico. El script de un objeto, y por lo tanto sus " -"propiedades, métodos y señales, se pueden cambiar en tiempo de ejecución. " -"Debido a esto, puede haber ocasiones en las que, por ejemplo, una propiedad " -"requerida por un método puede no existir. Para evitar errores en tiempo de " -"ejecución, consulte métodos como [method set], [method get], [method call], " -"[method has_method], [method has_signal], etc. Tenga en cuenta que estos " -"métodos son [b]mucho[/b] más lentos que las referencias directas.\n" -"En GDScript, también puede comprobar si una propiedad, método o nombre de " -"señal determinados existe en un objeto con el operador [code]in[/code]:\n" -"[codeblock]\n" -"var node = Node.new()\n" -"print(\"name\" in node) # Imprime true\n" -"print(\"get_parent\" in node) # Imprime true\n" -"print(\"tree_entered\" in node) # Imprime true\n" -"print(\"unknown\" in node) # Imprime false\n" -"[/codeblock]\n" -"Las notificaciones son constantes [int] que los objetos suelen enviar y " -"recibir. Por ejemplo, en cada frame renderizado, [SceneTree] notifica a los " -"nodos dentro del árbol con una [constante Node.NOTIFICATION_PROCESS]. Los " -"nodos la reciben y pueden llamar a [method Node._process] para actualizar. " -"Para hacer uso de las notificaciones, consulte [method notification] y " -"[method _notification].\n" -"Por último, cada objeto también puede contener metadatos (datos sobre datos). " -"[method set_meta] puede ser útil para almacenar información de la que el " -"objeto en sí no depende. Para mantener limpio el código, se desaconseja hacer " -"un uso excesivo de los metadatos.\n" -"[b]Nota:[/b] A diferencia de las referencias a un [RefCounted], las " -"referencias a un objeto almacenado en una variable pueden volverse inválidas " -"sin estar configuradas como [code]null[/code]. Para verificar si se ha " -"eliminado un objeto, [i]no[/i] lo compare con [code]null[/code]. En su lugar, " -"utilice [method @GlobalScope.is_instance_valid]. También se recomienda " -"heredar de [RefCounted] para las clases que almacenan datos en lugar de " -"[Object].\n" -"[b]Nota:[/b] El [code]script[/code] no está expuesto como la mayoría de las " -"propiedades. Para configurar u obtener el [Script] de un objeto en el código, " -"use [method set_script] y [method get_script], respectivamente." - msgid "Object notifications" msgstr "Notificaciones de objeto" @@ -13223,13 +12530,6 @@ msgstr "Junta de palma." msgid "Wrist joint." msgstr "Junta de muñeca." -msgid "" -"Generates and sets an optimized translation from the given [Translation] " -"resource." -msgstr "" -"Genera y establece una traducción optimizada a partir del recurso de " -"[Translation] dado." - msgid "Clears all the items in the [OptionButton]." msgstr "Borra todos los elementos del [OptionButton]." @@ -13272,15 +12572,6 @@ msgstr "" msgid "The arrow icon to be drawn on the right end of the button." msgstr "El icono de la flecha que se dibujará en el extremo derecho del botón." -msgid "" -"Returns the model name of the current device.\n" -"[b]Note:[/b] This method is implemented on Android and iOS. Returns " -"[code]\"GenericDevice\"[/code] on unsupported platforms." -msgstr "" -"Devuelve el nombre del modelo del dispositivo actual.\n" -"[b]Nota:[/b] Este método está implementado en Android e iOS. Devuelve " -"[code]\"GenericDevice\"[/code] en plataformas no soportadas." - msgid "" "Appends an element at the end of the array (alias of [method push_back])." msgstr "Concatena un elemento al final del array (alias de [method push_back])." @@ -13292,6 +12583,9 @@ msgstr "" "Limpia el array. Esto es equivalente a usar [method resize] con un tamaño de " "[code]0[/code]." +msgid "Returns the number of times an element is in the array." +msgstr "Devuelve el numer de veces que un elemento es encuentra en el array." + msgid "" "Inserts a new element at a given position in the array. The position must be " "valid, or at the end of the array ([code]idx == size()[/code])." @@ -15094,14 +14388,6 @@ msgstr "" "Desplazamiento de la posición de las sugerencias, en relación con el punto " "donde se encuentra el cursor del ratón." -msgid "" -"If [code]true[/code], keeps the screen on (even in case of inactivity), so " -"the screensaver does not take over. Works on desktop and mobile platforms." -msgstr "" -"Si [code]true[/code], mantiene la pantalla encendida (incluso en caso de " -"inactividad), por lo que el salvapantallas no toma el control. Funciona en " -"plataformas de escritorio y móviles." - msgid "" "If [code]true[/code], the home indicator is hidden automatically. This only " "affects iOS devices without a physical home button." @@ -15508,15 +14794,6 @@ msgstr "" "Este método restablece el estado del objeto, como si fuera recién creado. Es " "decir, desasigna la expresión regular de este objeto." -msgid "" -"Compiles and assign the search pattern to use. Returns [constant OK] if the " -"compilation is successful. If an error is encountered, details are printed to " -"standard output and an error is returned." -msgstr "" -"Compila y asigna el patrón de búsqueda a utilizar. Devuelve [constant OK] si " -"la compilación tiene éxito. Si se encuentra un error, los detalles se " -"imprimen en la salida estándar y se devuelve un error." - msgid "Returns the number of capturing groups in compiled pattern." msgstr "Devuelve el número de grupos de captura en un patrón compilado." @@ -16277,9 +15554,6 @@ msgstr "" msgid "Objects are displayed without light information." msgstr "Los objetos se muestran sin información de la luz." -msgid "Debug draw draws objects in wireframe." -msgstr "El dibujado de depuración dibuja objetos en un marco de alambre." - msgid "Use the clear color as background." msgstr "Usa el color limpio como fondo." @@ -16573,13 +15847,6 @@ msgstr "" msgid "If [code]true[/code], the label allows text selection." msgstr "Si [code]true[/code], la etiqueta permite la selección de texto." -msgid "" -"If [code]true[/code], shortcut keys for context menu items are enabled, even " -"if the context menu is disabled." -msgstr "" -"Si [code]true[/code], las teclas de atajo para los elementos del menú " -"contextual están habilitadas, incluso si el menú contextual está desactivado." - msgid "" "The number of spaces associated with a single tab length. Does not affect " "[code]\\t[/code] in text tags, only indent tags." @@ -16612,9 +15879,6 @@ msgstr "El color de la sombra de la fuente." msgid "The color of the selection box." msgstr "El color de la caja de selección." -msgid "The vertical space between lines." -msgstr "El espacio vertical entre las líneas." - msgid "The horizontal offset of the font's shadow." msgstr "El desplazamiento horizontal de la sombra de la fuente." @@ -16670,16 +15934,6 @@ msgstr "" "Métodos para raycasting y shapecasting están disponibles. Véase [enum " "CCDMode] para más detalles." -msgid "" -"Multiplies the gravity applied to the body. The body's gravity is calculated " -"from the [b]Default Gravity[/b] value in [b]Project > Project Settings > " -"Physics > 2d[/b] and/or any additional gravity vector applied by [Area2D]s." -msgstr "" -"Multiplica la gravedad aplicada al cuerpo. La gravedad del cuerpo se calcula " -"a partir del valor [b]Gravedad por defecto[/b] en [b]Proyecto > Configuración " -"del proyecto > Física > 2d[/b] y/o cualquier vector de gravedad adicional " -"aplicado por [Area2D]s." - msgid "" "The physics material override for the body.\n" "If a material is assigned to this property, it will be used instead of any " @@ -17128,19 +16382,6 @@ msgstr "" "Bloquea el valor [member split_offset] para que no se salga de los valores " "mínimos y máximos actualmente posibles." -msgid "" -"If [code]true[/code], the area of the first [Control] will be collapsed and " -"the dragger will be disabled." -msgstr "" -"Si [code]true[/code], el área del primer [Control] se colapsará y el " -"arrastrador se desactivará." - -msgid "" -"Determines the dragger's visibility. See [enum DraggerVisibility] for details." -msgstr "" -"Determina la visibilidad del arrastrador. Ver [enum DraggerVisibility] para " -"más detalles." - msgid "" "The initial offset of the splitting between the two [Control]s, with [code]0[/" "code] being at the end of the first [Control]." @@ -17151,27 +16392,6 @@ msgstr "" msgid "Emitted when the dragger is dragged by user." msgstr "Emitido cuando el arrastrador es arrastrado por el usuario." -msgid "The split dragger is visible when the cursor hovers it." -msgstr "El arrastre dividido es visible cuando el cursor pasa por encima." - -msgid "The split dragger is never visible." -msgstr "El arrastre dividido nunca es visible." - -msgid "The split dragger is never visible and its space collapsed." -msgstr "El arrastrador dividido nunca es visible y su espacio se colapsó." - -msgid "" -"Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically " -"when it isn't under the cursor. If 0 ([code]false[/code]), it's always " -"visible." -msgstr "" -"Valor booleano. Si 1 ([code]true[/code]), el grabador se esconderá " -"automáticamente cuando no esté bajo el cursor. Si 0 ([code]false[/code]), " -"siempre está visible." - -msgid "The space between sides of the container." -msgstr "El espacio entre los lados del contenedor." - msgid "The icon used for the grabber drawn in the middle area." msgstr "El icono usado para el agarrador dibujado en la area media." @@ -17917,12 +17137,6 @@ msgstr "Deselecciona la selección actual." msgid "Returns the text of a specific line." msgstr "Devuelve el texto de una línea específica." -msgid "Returns [code]true[/code] if a \"redo\" action is available." -msgstr "Devuelve [code]true[/code] si una acción de \"redo\" está disponible." - -msgid "Returns [code]true[/code] if an \"undo\" action is available." -msgstr "Devuelve [code]true[/code] si se dispone de una acción de \"deshacer\"." - msgid "Perform redo operation." msgstr "Realiza la operación de rehacer." @@ -18013,9 +17227,6 @@ msgstr "" "Establece el resaltado [Color] de múltiples ocurrencias. [member " "highlight_all_occurrences] tiene que ser activado." -msgid "Sets the spacing between the lines." -msgstr "Establece el espacio entre las líneas." - msgid "Sets the default [Font]." msgstr "Establece la [Font] predeterminada." @@ -18062,25 +17273,6 @@ msgstr "" "la máscara, los píxeles blancos representan el área donde se puede hacer clic " "en el botón. Úsalo para crear botones con formas curvas." -msgid "" -"Texture to display when the node is disabled. See [member BaseButton." -"disabled]." -msgstr "" -"La textura se muestra cuando el nodo está desactivado. Ver [member BaseButton." -"disabled]." - -msgid "Texture to display when the mouse hovers the node." -msgstr "Textura para mostrar cuando el ratón pasa por encima del nodo." - -msgid "" -"Texture to display on mouse down over the node, if the node has keyboard " -"focus and the player presses the Enter key or if the player presses the " -"[member BaseButton.shortcut] key." -msgstr "" -"Textura que se muestra al pasar el ratón por encima del nodo, si el nodo " -"tiene el foco del teclado y el jugador pulsa la tecla Intro o si el jugador " -"pulsa la tecla [member BaseButton.shortcut]." - msgid "Scale to fit the node's bounding rectangle." msgstr "Escala para ajustarse al rectángulo delimitador del nodo." @@ -18129,18 +17321,6 @@ msgstr "" "Barra de progreso basada en la textura. Útil para cargar pantallas y barras " "de vida o resistencia." -msgid "" -"If [code]true[/code], Godot treats the bar's textures like in " -"[NinePatchRect]. Use the [code]stretch_margin_*[/code] properties like " -"[member stretch_margin_bottom] to set up the nine patch's 3×3 grid. When " -"using a radial [member fill_mode], this setting will enable stretching." -msgstr "" -"Si [code]true[/code], Godot trata las texturas de la barra como en " -"[NinePatchRect]. Usa las propiedades de [code]stretch_margin_*[/code] como en " -"[member stretch_margin_bottom] para configurar la cuadrícula de 3×3 del nueve " -"parche. Cuando se utiliza un [member fill_mode] radial, este ajuste permitirá " -"el estiramiento." - msgid "The [member texture_progress] fills from left to right." msgstr "El [member texture_progress] se llena de izquierda a derecha." @@ -18244,6 +17424,48 @@ msgstr "Despeja las celdas que no existen en el tileset." msgid "Tile library for tilemaps." msgstr "Biblioteca de tile para tilemaps." +msgid "" +"Sets how many animation frames the tile at coordinates [param atlas_coords] " +"has." +msgstr "" +"Establece cuántos fotogramas de animación tiene el mosaico en las coordenadas " +"[param atlas_coords]." + +msgid "" +"Sets the tile animation mode of the tile at [param atlas_coords] to [param " +"mode]. See also [method get_tile_animation_mode]." +msgstr "" +"Establece el modo de animación del mosaico en [param atlas_coords] en [param " +"mode]. Véase también [método get_tile_animation_mode]." + +msgid "" +"Sets the margin (in grid tiles) between each tile in the animation layout of " +"the tile at coordinates [param atlas_coords] has." +msgstr "" +"Establece el espaciado (en mosaicos de la cuadrícula) entre mosaicos en el " +"diseño animado del mosaico ubicado en las coordenadas [param atlas_coords]." + +msgid "" +"Sets the animation speed of the tile at coordinates [param atlas_coords] has." +msgstr "" +"Establece la velocidad de animación del mosaico ubicado en las coordenadas " +"[param atlas_coords]." + +msgid "Margins, in pixels, to offset the origin of the grid in the texture." +msgstr "" +"Márgenes, en píxeles, para desplazar el origen de la cuadrícula en la textura." + +msgid "Separation, in pixels, between each tile texture region of the grid." +msgstr "" +"El espacio, en píxeles, es el espacio entre mosaicos en el área de textura de " +"la cuadrícula." + +msgid "The atlas texture." +msgstr "Hoja de texturas." + +msgid "Represents the size of the [enum TileAnimationMode] enum." +msgstr "Representa el tamaño de la enumeración [enum TileAnimationMode]." + msgid "A countdown timer." msgstr "Un temporizador de cuenta atrás." @@ -18316,12 +17538,6 @@ msgstr "Devuelve todos los mensajes (teclas)." msgid "The locale of the translation." msgstr "El locale de la traducción." -msgid "Adds a [Translation] resource." -msgstr "Añade un recurso de [Translation]." - -msgid "Clears the server from all translations." -msgstr "Borra el servidor de todas las traducciones." - msgid "" "Returns a locale's language and its variant (e.g. [code]\"en_US\"[/code] " "would return [code]\"English (United States)\"[/code])." @@ -18329,9 +17545,6 @@ msgstr "" "Devuelve el locale de un lenguaje y su variante (por ejemplo, " "[code]\"en_US\"[/code] devolvería [code]\"English (United States)\"[/code])." -msgid "Removes the given translation from the server." -msgstr "Elimina la traducción dada del servidor." - msgid "Clears the tree. This removes all items." msgstr "Despeja el árbol. Esto elimina todos los elementos." @@ -18582,6 +17795,9 @@ msgstr "" "[enum DropModeFlags] para una descripción más detallada de los lugares de " "caída." +msgid "Text [Color] used when the item is selected." +msgstr "[Color] del texto utilizado cuando se selecciona el elemento." + msgid "[Color] of the guideline." msgstr "[Color] de la guía." @@ -18710,9 +17926,6 @@ msgstr "" msgid "Returns the [Color] modulating the column's icon." msgstr "Devuelve el [Color] modulando el icono de la columna." -msgid "Returns the parent TreeItem or a null object if there is none." -msgstr "Devuelve el TreeItem padre o un objeto nulo si no hay ninguno." - msgid "Returns the given column's text." msgstr "Devuelve el texto de la columna dada." @@ -18750,286 +17963,6 @@ msgstr "Tipo de malla interna." msgid "Mesh type used internally for collision calculations." msgstr "Tipo de malla utilizada internamente para los cálculos de colisión." -msgid "" -"Tweens are mostly useful for animations requiring a numerical property to be " -"interpolated over a range of values. The name [i]tween[/i] comes from [i]in-" -"betweening[/i], an animation technique where you specify [i]keyframes[/i] and " -"the computer interpolates the frames that appear between them. Animating " -"something with a [Tween] is called tweening.\n" -"[Tween] is more suited than [AnimationPlayer] for animations where you don't " -"know the final values in advance. For example, interpolating a dynamically-" -"chosen camera zoom value is best done with a [Tween]; it would be difficult " -"to do the same thing with an [AnimationPlayer] node. Tweens are also more " -"light-weight than [AnimationPlayer], so they are very much suited for simple " -"animations or general tasks that don't require visual tweaking provided by " -"the editor. They can be used in a \"fire-and-forget\" manner for some logic " -"that normally would be done by code. You can e.g. make something shoot " -"periodically by using a looped [CallbackTweener] with a delay.\n" -"A [Tween] can be created by using either [method SceneTree.create_tween] or " -"[method Node.create_tween]. [Tween]s created manually (i.e. by using " -"[code]Tween.new()[/code]) are invalid and can't be used for tweening values.\n" -"A tween animation is created by adding [Tweener]s to the [Tween] object, " -"using [method tween_property], [method tween_interval], [method " -"tween_callback] or [method tween_method]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_property($Sprite, \"modulate\", Color.RED, 1)\n" -"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n" -"tween.tween_callback($Sprite.queue_free)\n" -"[/gdscript]\n" -"[csharp]\n" -"Tween tween = GetTree().CreateTween();\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"modulate\", Colors.Red, 1.0f);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"scale\", Vector2.Zero, 1.0f);\n" -"tween.TweenCallback(Callable.From(GetNode(\"Sprite\").QueueFree));\n" -"[/csharp]\n" -"[/codeblocks]\n" -"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, " -"before finally calling [method Node.queue_free] to free the sprite. " -"[Tweener]s are executed one after another by default. This behavior can be " -"changed using [method parallel] and [method set_parallel].\n" -"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a " -"chained method call can be used to tweak the properties of this [Tweener]. " -"For example, if you want to set a different transition type in the above " -"example, you can use [method set_trans]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_property($Sprite, \"modulate\", Color.RED, 1).set_trans(Tween." -"TRANS_SINE)\n" -"tween.tween_property($Sprite, \"scale\", Vector2(), 1).set_trans(Tween." -"TRANS_BOUNCE)\n" -"tween.tween_callback($Sprite.queue_free)\n" -"[/gdscript]\n" -"[csharp]\n" -"Tween tween = GetTree().CreateTween();\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"modulate\", Colors.Red, 1.0f)." -"SetTrans(Tween.TransitionType.Sine);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"scale\", Vector2.Zero, 1.0f)." -"SetTrans(Tween.TransitionType.Bounce);\n" -"tween.TweenCallback(Callable.From(GetNode(\"Sprite\").QueueFree));\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Most of the [Tween] methods can be chained this way too. In the following " -"example the [Tween] is bound to the running script's node and a default " -"transition is set for its [Tweener]s:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween." -"TRANS_ELASTIC)\n" -"tween.tween_property($Sprite, \"modulate\", Color.RED, 1)\n" -"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n" -"tween.tween_callback($Sprite.queue_free)\n" -"[/gdscript]\n" -"[csharp]\n" -"var tween = GetTree().CreateTween().BindNode(this).SetTrans(Tween." -"TransitionType.Elastic);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"modulate\", Colors.Red, 1.0f);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"scale\", Vector2.Zero, 1.0f);\n" -"tween.TweenCallback(Callable.From(GetNode(\"Sprite\").QueueFree));\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Another interesting use for [Tween]s is animating arbitrary sets of objects:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = create_tween()\n" -"for sprite in get_children():\n" -" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n" -"[/gdscript]\n" -"[csharp]\n" -"Tween tween = CreateTween();\n" -"foreach (Node sprite in GetChildren())\n" -" tween.TweenProperty(sprite, \"position\", Vector2.Zero, 1.0f);\n" -"[/csharp]\n" -"[/codeblocks]\n" -"In the example above, all children of a node are moved one after another to " -"position (0, 0).\n" -"You should avoid using more than one [Tween] per object's property. If two or " -"more tweens animate one property at the same time, the last one created will " -"take priority and assign the final value. If you want to interrupt and " -"restart an animation, consider assigning the [Tween] to a variable:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween\n" -"func animate():\n" -" if tween:\n" -" tween.kill() # Abort the previous animation.\n" -" tween = create_tween()\n" -"[/gdscript]\n" -"[csharp]\n" -"private Tween _tween;\n" -"\n" -"public void Animate()\n" -"{\n" -" if (_tween != null)\n" -" _tween.Kill(); // Abort the previous animation\n" -" _tween = CreateTween();\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Some [Tweener]s use transitions and eases. The first accepts a [enum " -"TransitionType] constant, and refers to the way the timing of the animation " -"is handled (see [url=https://easings.net/]easings.net[/url] for some " -"examples). The second accepts an [enum EaseType] constant, and controls where " -"the [code]trans_type[/code] is applied to the interpolation (in the " -"beginning, the end, or both). If you don't know which transition and easing " -"to pick, you can try different [enum TransitionType] constants with [constant " -"EASE_IN_OUT], and use the one that looks best.\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"tween_cheatsheet.webp]Tween easing and transition types cheatsheet[/url]\n" -"[b]Note:[/b] Tweens are not designed to be re-used and trying to do so " -"results in an undefined behavior. Create a new Tween for each animation and " -"every time you replay an animation from start. Keep in mind that Tweens start " -"immediately, so only create a Tween when you want to start animating.\n" -"[b]Note:[/b] The tween is processed after all of the nodes in the current " -"frame, i.e. node's [method Node._process] method would be called before the " -"tween (or [method Node._physics_process] depending on the value passed to " -"[method set_process_mode])." -msgstr "" -"Los interpoladores (tweens) son útiles principalmente para animaciones que " -"requieren que se interpole una propiedad numérica en un rango de valores. El " -"nombre [i]tween[/i] proviene de [i]in-betweening[/i], una técnica de " -"animación en la que se especifican [i]frames clave[/i] y la computadora " -"interpola los frame que aparecen entre ellos. Animar algo con un [Tween] se " -"llama interpolación (tweening).\n" -"Un [Tween] es más adecuado que [AnimationPlayer] para animaciones en las que " -"no se conocen los valores finales de antemano. Por ejemplo, la interpolación " -"de un valor de zoom de cámara elegido dinámicamente se realiza mejor con un " -"[Tween]; sería difícil hacer lo mismo con un nodo [AnimationPlayer]. Los " -"tweens también son más livianos que [AnimationPlayer], por lo que son muy " -"adecuados para animaciones simples o tareas generales que no requieren " -"ajustes visuales proporcionados por el editor. Se pueden utilizar de forma " -"\"activar y olvidar\" para alguna lógica que normalmente se llevaría a cabo " -"mediante código. Por ejemplo, se puede hacer que algo se active " -"periódicamente mediante un [CallbackTweener] en bucle con un retraso.\n" -"Se puede crear un [Tween] mediante el [method SceneTree.create_tween] o el " -"[method Node.create_tween]. Los [Tween]s creados manualmente (es decir, " -"mediante [code]Tween.new()[/code]) no son válidos y no se pueden utilizar " -"para valores de interpolación.\n" -"Una animación de interpolación se crea agregando [Tweener]s al objeto " -"[Tween], utilizando [method tween_property], [method tween_interval], [method " -"tween_callback] o [method tween_method]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_property($Sprite, \"modulate\", Color.RED, 1)\n" -"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n" -"tween.tween_callback($Sprite.queue_free)\n" -"[/gdscript]\n" -"[csharp]\n" -"Tween tween = GetTree().CreateTween();\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"modulate\", Colors.Red, 1.0f);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"scale\", Vector2.Zero, 1.0f);\n" -"tween.TweenCallback(Callable.From(GetNode(\"Sprite\").QueueFree));\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Esta secuencia hará que el nodo [code]$Sprite[/code] se vuelva rojo, luego se " -"encoja, antes de finalmente llamar al [method Node.queue_free] para liberar " -"el sprite. Los [Tweener] se ejecutan uno tras otro de manera predeterminada. " -"Este comportamiento se puede cambiar usando [method parallel] y [method " -"set_parallel].\n" -"Cuando se crea un [Tweener] con uno de los métodos [code]tween_*[/code], se " -"puede usar una llamada de método encadenada para modificar las propiedades de " -"este [Tweener]. Por ejemplo, si desea establecer un tipo de transición " -"diferente en el ejemplo anterior, puede utilizar [method set_trans]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_property($Sprite, \"modulate\", Color.RED, 1).set_trans(Tween." -"TRANS_SINE)\n" -"tween.tween_property($Sprite, \"scale\", Vector2(), 1).set_trans(Tween." -"TRANS_BOUNCE)\n" -"tween.tween_callback($Sprite.queue_free)\n" -"[/gdscript]\n" -"[csharp]\n" -"Tween tween = GetTree().CreateTween();\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"modulate\", Colors.Red, 1.0f)." -"SetTrans(Tween.TransitionType.Sine);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"scale\", Vector2.Zero, 1.0f)." -"SetTrans(Tween.TransitionType.Bounce);\n" -"tween.TweenCallback(Callable.From(GetNode(\"Sprite\").QueueFree));\n" -"[/csharp]\n" -"[/codeblocks]\n" -"La mayoría de los métodos [Tween] también se pueden encadenar de esta manera. " -"En el siguiente ejemplo, el [Tween] está vinculado al nodo del script en " -"ejecución y se establece una transición predeterminada para sus [Tweener]s:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween." -"TRANS_ELASTIC)\n" -"tween.tween_property($Sprite, \"modulate\", Color.RED, 1)\n" -"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n" -"tween.tween_callback($Sprite.queue_free)\n" -"[/gdscript]\n" -"[csharp]\n" -"var tween = GetTree().CreateTween().BindNode(this).SetTrans(Tween." -"TransitionType.Elastic);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"modulate\", Colors.Red, 1.0f);\n" -"tween.TweenProperty(GetNode(\"Sprite\"), \"scale\", Vector2.Zero, 1.0f);\n" -"tween.TweenCallback(Callable.From(GetNode(\"Sprite\").QueueFree));\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Otro uso interesante de los [Tween] es animar conjuntos arbitrarios de " -"objetos:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween = create_tween()\n" -"for sprite in get_children():\n" -" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n" -"[/gdscript]\n" -"[csharp]\n" -"Tween tween = CreateTween();\n" -"foreach (Node sprite in GetChildren())\n" -" tween.TweenProperty(sprite, \"position\", Vector2.Zero, 1.0f);\n" -"[/csharp]\n" -"[/codeblocks]\n" -"En el ejemplo anterior, todos los hijos de un nodo se mueven uno tras otro a " -"la posición (0, 0).\n" -"Debe evitar usar más de un [Tween] por propiedad del objeto. Si dos o más " -"interpolaciones animan una propiedad al mismo tiempo, la última creada tendrá " -"prioridad y asignará el valor final. Si desea interrumpir y reiniciar una " -"animación, considere asignar el [Tween] a una variable:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var tween\n" -"func animate():\n" -" if tween:\n" -" tween.kill() # Aborta la animación anterior.\n" -" tween = create_tween()\n" -"[/gdscript]\n" -"[csharp]\n" -"private Tween _tween;\n" -"\n" -"public void Animate()\n" -"{\n" -" if (_tween != null)\n" -" _tween.Kill(); // Cancelar la animación anterior\n" -" _tween = CreateTween();\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Algunos [Tweener] usan transiciones y suavizados. El primero acepta una " -"constante [enum TransitionType] y hace referencia a la forma en que se maneja " -"el tiempo de la animación (consulte [url=https://easings.net/]easings.net[/" -"url] para ver algunos ejemplos). El segundo acepta una constante [enum " -"EaseType] y controla dónde se aplica el [code]trans_type[/code] a la " -"interpolación (al principio, al final o en ambos). Si no sabe qué transición " -"y suavizado elegir, puede probar diferentes constantes [enum TransitionType] " -"con [constant EASE_IN_OUT] y usar la que se vea mejor.\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"tween_cheatsheet.webp]Conjunto de trucos sobre tipos de transiciones y " -"suavizado de interpolaciones[/url]\n" -"[b]Nota:[/b] Las interpolaciones no están diseñadas para reutilizarse y, si " -"se intenta hacerlo, se obtendrá un comportamiento indefinido. Crea una nueva " -"interpolación para cada animación y cada vez que vuelvas a reproducir una " -"animación desde el principio. Ten en cuenta que las interpolaciones comienzan " -"inmediatamente, así que crea una sola cuando quieras empezar a animar.\n" -"[b]Nota:[/b] La interpolación se procesa después de todos los nodos del frame " -"actual, es decir, el método [method Node._process] del nodo se llamaría antes " -"que la interpolación (o [method Node._physics_process], según el valor que se " -"pase a [method set_process_mode])." - msgid "The animation is interpolated linearly." msgstr "La animación se interpola linealmente." @@ -19188,189 +18121,6 @@ msgstr "" "Hace que las operaciones de \"hacer\"/\"deshacer\" se mantengan en acciones " "separadas." -msgid "" -"This class can be used to discover compatible [UPNPDevice]s on the local " -"network and execute commands on them, like managing port mappings (for port " -"forwarding/NAT traversal) and querying the local and remote network IP " -"address. Note that methods on this class are synchronous and block the " -"calling thread.\n" -"To forward a specific port (here [code]7777[/code], note both [method " -"discover] and [method add_port_mapping] can return errors that should be " -"checked):\n" -"[codeblock]\n" -"var upnp = UPNP.new()\n" -"upnp.discover()\n" -"upnp.add_port_mapping(7777)\n" -"[/codeblock]\n" -"To close a specific port (e.g. after you have finished using it):\n" -"[codeblock]\n" -"upnp.delete_port_mapping(port)\n" -"[/codeblock]\n" -"[b]Note:[/b] UPnP discovery blocks the current thread. To perform discovery " -"without blocking the main thread, use [Thread]s like this:\n" -"[codeblock]\n" -"# Emitted when UPnP port mapping setup is completed (regardless of success or " -"failure).\n" -"signal upnp_completed(error)\n" -"\n" -"# Replace this with your own server port number between 1024 and 65535.\n" -"const SERVER_PORT = 3928\n" -"var thread = null\n" -"\n" -"func _upnp_setup(server_port):\n" -" # UPNP queries take some time.\n" -" var upnp = UPNP.new()\n" -" var err = upnp.discover()\n" -"\n" -" if err != OK:\n" -" push_error(str(err))\n" -" emit_signal(\"upnp_completed\", err)\n" -" return\n" -"\n" -" if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():\n" -" upnp.add_port_mapping(server_port, server_port, ProjectSettings." -"get_setting(\"application/config/name\"), \"UDP\")\n" -" upnp.add_port_mapping(server_port, server_port, ProjectSettings." -"get_setting(\"application/config/name\"), \"TCP\")\n" -" emit_signal(\"upnp_completed\", OK)\n" -"\n" -"func _ready():\n" -" thread = Thread.new()\n" -" thread.start(_upnp_setup.bind(SERVER_PORT))\n" -"\n" -"func _exit_tree():\n" -" # Wait for thread finish here to handle game exit while the thread is " -"running.\n" -" thread.wait_to_finish()\n" -"[/codeblock]\n" -"[b]Terminology:[/b] In the context of UPnP networking, \"gateway\" (or " -"\"internet gateway device\", short IGD) refers to network devices that allow " -"computers in the local network to access the internet (\"wide area network\", " -"WAN). These gateways are often also called \"routers\".\n" -"[b]Pitfalls:[/b]\n" -"- As explained above, these calls are blocking and shouldn't be run on the " -"main thread, especially as they can block for multiple seconds at a time. Use " -"threading!\n" -"- Networking is physical and messy. Packets get lost in transit or get " -"filtered, addresses, free ports and assigned mappings change, and devices may " -"leave or join the network at any time. Be mindful of this, be diligent when " -"checking and handling errors, and handle these gracefully if you can: add " -"clear error UI, timeouts and re-try handling.\n" -"- Port mappings may change (and be removed) at any time, and the remote/" -"external IP address of the gateway can change likewise. You should consider " -"re-querying the external IP and try to update/refresh the port mapping " -"periodically (for example, every 5 minutes and on networking failures).\n" -"- Not all devices support UPnP, and some users disable UPnP support. You need " -"to handle this (e.g. documenting and requiring the user to manually forward " -"ports, or adding alternative methods of NAT traversal, like a relay/mirror " -"server, or NAT hole punching, STUN/TURN, etc.).\n" -"- Consider what happens on mapping conflicts. Maybe multiple users on the " -"same network would like to play your game at the same time, or maybe another " -"application uses the same port. Make the port configurable, and optimally " -"choose a port automatically (re-trying with a different port on failure).\n" -"[b]Further reading:[/b] If you want to know more about UPnP (and the Internet " -"Gateway Device (IGD) and Port Control Protocol (PCP) specifically), " -"[url=https://en.wikipedia.org/wiki/Universal_Plug_and_Play]Wikipedia[/url] is " -"a good first stop, the specification can be found at the [url=https://" -"openconnectivity.org/developer/specifications/upnp-resources/upnp/]Open " -"Connectivity Foundation[/url] and Godot's implementation is based on the " -"[url=https://github.com/miniupnp/miniupnp]MiniUPnP client[/url]." -msgstr "" -"Esta clase se puede utilizar para descubrir dispositivos UPNP [UPNPDevice] " -"compatibles en la red local y ejecutar comandos en ellos, como administrar " -"asignaciones de puertos (para redireccionamiento de puertos/transmisión NAT) " -"y consultar la dirección IP de la red local y remota. Tenga en cuenta que los " -"métodos de esta clase son sincrónicos y bloquean el hilo de llamada.\n" -"Para redireccionar un puerto específico (aquí [code]7777[/code], tenga en " -"cuenta que tanto [method discover] como [method add_port_mapping] pueden " -"devolver errores que deben comprobarse):\n" -"[codeblock]\n" -"var upnp = UPNP.new()\n" -"upnp.discover()\n" -"upnp.add_port_mapping(7777)\n" -"[/codeblock]\n" -"Para cerrar un puerto específico (por ejemplo, después de haber terminado de " -"usarlo):\n" -"[codeblock]\n" -"upnp.delete_port_mapping(port)\n" -"[/codeblock]\n" -"[b]Nota:[/b] El descubrimiento UPnP bloquea el hilo actual. Para realizar el " -"descubrimiento sin bloquear el hilo principal, use hilos [Thread] como éste:\n" -"[codeblock]\n" -"# Se emite cuando se completa la configuración de la asignación del puerto " -"UPnP (sin importar si se realizó correctamente o no).\n" -"signal upnp_completed(error)\n" -"\n" -"# Reemplace esto con su propio número de puerto de servidor entre 1024 y " -"65535.\n" -"const SERVER_PORT = 3928\n" -"var thread = null\n" -"\n" -"func _upnp_setup(server_port):\n" -" # Las consultas UPNP toman algo de tiempo.\n" -" var upnp = UPNP.new()\n" -" var err = upnp.discover()\n" -"\n" -" if err != OK:\n" -" push_error(str(err))\n" -" emit_signal(\"upnp_completed\", err)\n" -" return\n" -"\n" -" if upnp.get_gateway() y upnp.get_gateway().is_valid_gateway():\n" -" upnp.add_port_mapping(server_port, server_port, ProjectSettings." -"get_setting(\"application/config/name\"), \"UDP\")\n" -" upnp.add_port_mapping(server_port, server_port, ProjectSettings." -"get_setting(\"application/config/name\"), \"TCP\")\n" -" emit_signal(\"upnp_completed\", OK)\n" -"\n" -"func _ready():\n" -" thread = Thread.new()\n" -" thread.start(_upnp_setup.bind(SERVER_PORT))\n" -"\n" -"func _exit_tree():\n" -" # Espere a que el hilo termine aquí para manejar la salida del juego " -"mientras el hilo está en ejecución.\n" -" thread.wait_to_finish()\n" -"[/codeblock]\n" -"[b]Terminología:[/b] En el contexto de las redes UPnP, \"puerta de enlace\" " -"(o \"dispositivo de puerta de enlace de Internet\", IGD abreviado) se refiere " -"a los dispositivos de red que permiten que las computadoras en la red local " -"accedan a Internet (\"red de área amplia\", WAN). Estas puertas de enlace a " -"menudo también se denominan \"enrutadores\".\n" -"[b]Problemas:[/b]\n" -"- Como se explicó anteriormente, estas llamadas son bloqueantes y no se deben " -"ejecutar en el hilo principal, especialmente porque pueden bloquearse durante " -"varios segundos a la vez. ¡Use subprocesos!\n" -"- Las redes son físicas y desordenadas. Los paquetes se pierden en tránsito o " -"se filtran, las direcciones, los puertos libres y las redirecciones asignadas " -"cambian, y los dispositivos pueden abandonar o unirse a la red en cualquier " -"momento. Tenga esto en cuenta, sea diligente al verificar y manejar errores, " -"y manéjelos con elegancia si puede: agregue una interfaz de usuario de error " -"clara, tiempos de espera y manejo de reintentos.\n" -"- El mapeo de puertos puede cambiar (y eliminarse) en cualquier momento, y la " -"dirección IP remota/externa de la puerta de enlace también puede cambiar. " -"Debe considerar volver a consultar la IP externa e intentar actualizar/" -"refrescar la asignación de puertos periódicamente (por ejemplo, cada 5 " -"minutos y en caso de fallas de red).\n" -"- No todos los dispositivos admiten UPnP, y algunos usuarios deshabilitan la " -"compatibilidad con UPnP. Debe manejar esto (por ejemplo, documentando y " -"solicitando al usuario que reenvíe puertos manualmente, o agregando métodos " -"alternativos de cruce de NAT, como un servidor de retransmisión/espejo, o " -"perforación de agujeros de NAT, STUN/TURN, etc.).\n" -"- Considere lo que sucede en los conflictos de reenvío. Tal vez varios " -"usuarios en la misma red quieran jugar su juego al mismo tiempo, o tal vez " -"otra aplicación use el mismo puerto. Haga que el puerto sea configurable y, " -"de manera óptima, elija un puerto automáticamente (reintentando con un puerto " -"diferente en caso de falla).\n" -"[b]Lectura adicional:[/b] Si desea obtener más información sobre UPnP (y " -"específicamente sobre el Dispositivo de Puerta de Enlace de Internet (IGD) y " -"el Protocolo de Control de Puerto (PCP)), [url=https://en.wikipedia.org/wiki/" -"Universal_Plug_and_Play]Wikipedia[/url] es una buena primera parada; la " -"especificación se puede encontrar en la [url=https://openconnectivity.org/" -"developer/specifications/upnp-resources/upnp/]Open Connectivity Foundation[/" -"url] y la implementación de Godot se basa en el [url=https://github.com/" -"miniupnp/miniupnp]cliente MiniUPnP[/url]." - msgid "Adds the given [UPNPDevice] to the list of discovered devices." msgstr "Añade el [UPNPDevice] dado a la lista de dispositivos descubiertos." @@ -19765,38 +18515,6 @@ msgid "Returns [code]true[/code] if this wheel is in contact with a surface." msgstr "" "Devuelve [code]true[/code] si esta rueda está en contacto con una superficie." -msgid "" -"The damping applied to the spring when the spring is being compressed. This " -"value should be between 0.0 (no damping) and 1.0. A value of 0.0 means the " -"car will keep bouncing as the spring keeps its energy. A good value for this " -"is around 0.3 for a normal car, 0.5 for a race car." -msgstr "" -"La amortiguación aplicada al resorte cuando éste se está comprimiendo. Este " -"valor debe estar entre 0.0 (sin amortiguación) y 1.0. Un valor de 0.0 " -"significa que el coche seguirá rebotando mientras el muelle mantiene su " -"energía. Un buen valor para esto es alrededor de 0.3 para un coche normal, " -"0.5 para un coche de carreras." - -msgid "" -"The damping applied to the spring when relaxing. This value should be between " -"0.0 (no damping) and 1.0. This value should always be slightly higher than " -"the [member damping_compression] property. For a [member damping_compression] " -"value of 0.3, try a relaxation value of 0.5." -msgstr "" -"La amortiguación aplicada al resorte al relajarse. Este valor debe estar " -"entre 0.0 (sin amortiguación) y 1.0. Este valor siempre debe ser ligeramente " -"superior a la propiedad [member damping_compression]. Para un valor de " -"[member damping_compression] de 0,3, pruebe un valor de relajación de 0,5." - -msgid "" -"This value defines the stiffness of the suspension. Use a value lower than 50 " -"for an off-road car, a value between 50 and 100 for a race car and try " -"something around 200 for something like a Formula 1 car." -msgstr "" -"Este valor define la rigidez de la suspensión. Usa un valor inferior a 50 " -"para un coche todoterreno, un valor entre 50 y 100 para un coche de carreras " -"y prueba algo alrededor de 200 para algo como un coche de Fórmula 1." - msgid "" "This is the distance the suspension can travel. As Godot units are equivalent " "to meters, keep this setting relatively low. Try a value between 0.1 and 0.3 " @@ -20449,20 +19167,6 @@ msgstr "" "[member type] se establece en [constant CTYPE_BOOLEAN] o [constant " "CTYPE_TRANSFORM]." -msgid "" -"The result will be true if all of component in vector satisfy the comparison " -"condition." -msgstr "" -"El resultado será cierto si todos los componentes del vector satisfacen la " -"condición de comparación." - -msgid "" -"The result will be true if any of component in vector satisfy the comparison " -"condition." -msgstr "" -"El resultado será verdadero si cualquiera de los componentes del vector " -"satisface la condición de comparación." - msgid "" "Translated to [code]texture(cubemap, vec3)[/code] in the shader language. " "Returns a color vector and alpha channel as scalar." @@ -21518,9 +20222,6 @@ msgstr "" "Un nodo de cámara con unas cuantas desviaciones para AR/VR aplicadas, como el " "seguimiento de la ubicación." -msgid "A spatial node representing a spatially-tracked controller." -msgstr "Un nodo espacial que representa un controlador de seguimiento espacial." - msgid "Emitted when a button on this controller is pressed." msgstr "Se emite cuando se presiona un botón de este controlador." diff --git a/doc/translations/fr.po b/doc/translations/fr.po index c65ff1232f4..11720842ef0 100644 --- a/doc/translations/fr.po +++ b/doc/translations/fr.po @@ -107,13 +107,21 @@ # zefdzeqf , 2024. # Edvard Fauchelevent , 2024. # Fontaine Nathan , 2024. +# Mvsqu3 , 2024. +# Luc Salommez , 2024. +# Patou <75997617+xorblo-doitus@users.noreply.github.com>, 2024. +# caspicrone , 2024. +# aioshiro , 2024. +# alpikespot , 2024. +# dan rastock , 2024. +# Théo GUEURET , 2025. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2024-09-04 20:31+0000\n" -"Last-Translator: Fontaine Nathan \n" +"PO-Revision-Date: 2025-01-23 17:32+0000\n" +"Last-Translator: Théo GUEURET \n" "Language-Team: French \n" "Language: fr\n" @@ -121,7 +129,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.7.2-rc\n" +"X-Generator: Weblate 5.10-dev\n" msgid "All classes" msgstr "Toutes les classes" @@ -365,16 +373,6 @@ msgstr "" msgid "Built-in GDScript constants, functions, and annotations." msgstr "Constantes, fonctions et annotations intégrées à GDScript." -msgid "" -"A list of GDScript-specific utility functions and annotations accessible from " -"any script.\n" -"For the list of the global functions and constants see [@GlobalScope]." -msgstr "" -"Une liste de fonctions utilitaires et d'annotations, utilisables depuis " -"n'importe quel script.\n" -"Cette liste est spécifique à GDScript, pour voir la liste des fonctions et " -"constantes globales voir [@GlobalScope]." - msgid "GDScript exports" msgstr "Exports GDScript" @@ -471,23 +469,6 @@ msgstr "" "pouvez donc pas y accéder en tant que [Callable] ou l'utiliser dans des " "expressions." -msgid "" -"Returns a single character (as a [String]) of the given Unicode code point " -"(which is compatible with ASCII code).\n" -"[codeblock]\n" -"a = char(65) # a is \"A\"\n" -"a = char(65 + 32) # a is \"a\"\n" -"a = char(8364) # a is \"€\"\n" -"[/codeblock]" -msgstr "" -"Renvoie un caractère au format chaîne de caractère ([String]) correspondant à " -"la valeur Unicode donnée (compatible avec le code ASCII).\n" -"[codeblock]\n" -"a = char(65) # a vaut « A »\n" -"a = char(65 + 32) # a vaut « a »\n" -"a = char(8364) # a vaut « € »\n" -"[/codeblock]" - msgid "Use [method @GlobalScope.type_convert] instead." msgstr "Utilisez [method @GlobalScope.type_convert] à la place." @@ -572,117 +553,6 @@ msgstr "" "[b]Note :[/b] L'appel de cette fonction depuis un [Thread] n'est pas pris en " "charge. Cela renverra un tableau vide." -msgid "" -"Returns the passed [param instance] converted to a Dictionary. Can be useful " -"for serializing.\n" -"[b]Note:[/b] Cannot be used to serialize objects with built-in scripts " -"attached or objects allocated within built-in scripts.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Prints out:\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" -msgstr "" -"Renvoie le paramètre [param instance] passé, converti en un dictionnaire. " -"Utile pour la sérialisation.\n" -"[b]Remarque :[/b] Ne peut pas être utilisé pour sérialiser des objets " -"auxquels sont attachés des scripts intégrés ou des objets alloués dans des " -"scripts intégrés.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Résultat :\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" - -msgid "" -"Returns [code]true[/code] if [param value] is an instance of [param type]. " -"The [param type] value must be one of the following:\n" -"- A constant from the [enum Variant.Type] enumeration, for example [constant " -"TYPE_INT].\n" -"- An [Object]-derived class which exists in [ClassDB], for example [Node].\n" -"- A [Script] (you can use any class, including inner one).\n" -"Unlike the right operand of the [code]is[/code] operator, [param type] can be " -"a non-constant value. The [code]is[/code] operator supports more features " -"(such as typed arrays). Use the operator instead of this method if you do not " -"need dynamic type checking.\n" -"Examples:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Note:[/b] If [param value] and/or [param type] are freed objects (see " -"[method @GlobalScope.is_instance_valid]), or [param type] is not one of the " -"above options, this method will raise a runtime error.\n" -"See also [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (and other [Array] methods)." -msgstr "" -"Renvoie [code]true[/code] si [param value] est une instance de [param type]. " -"La valeur de [param type] doit être l'une des suivantes :\n" -"- Une constante de l'énumération [enum Variant.Type], par exemple [constant " -"TYPE_INT].\n" -"- Une classe dérivée de [Object] qui existe dans [ClassDB], par exemple " -"[Node].\n" -"- Un [Script] (vous pouvez utiliser n'importe quelle classe, y compris une " -"classe interne).\n" -"Contrairement à l'opérande droit de l'opérateur [code]is[/code], [param type] " -"peut être une valeur non constante. L'opérateur [code]is[/code] prend en " -"charge davantage de fonctionnalités (telles que les tableaux typés). Utilisez " -"l'opérateur au lieu de cette méthode si vous n'avez pas besoin d'une " -"vérification dynamique des types.\n" -"Exemples :\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Note :[/b] Si [param value] et/ou [param type] sont des objets libérés " -"(voir [method @GlobalScope.is_instance_valid]), ou si [param type] n'est pas " -"l'une des options ci-dessus, cette méthode lèvera une erreur d'exécution.\n" -"Voir aussi [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (et autres méthodes [Array])." - -msgid "" -"Returns the length of the given Variant [param var]. The length can be the " -"character count of a [String] or [StringName], the element count of any array " -"type, or the size of a [Dictionary]. For every other Variant type, a run-time " -"error is generated and execution is stopped.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Returns 4\n" -"\n" -"b = \"Hello!\"\n" -"len(b) # Returns 6\n" -"[/codeblock]" -msgstr "" -"Renvoie la longueur du Variant [param var]. La longueur peut être le nombre " -"de caractères d'une [String], le nombre d'éléments de n'importe quel type de " -"tableau ou la taille de [Dictionary]. Pour tout autre type de Variant, une " -"erreur d’exécution est générée et l’exécution est interrompue.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Renvoie 4\n" -"\n" -"B = \"Hello!\"\n" -"len(a) # Renvoie 6\n" -"[/codeblock]" - msgid "" "Returns a [Resource] from the filesystem located at the absolute [param " "path]. Unless it's already referenced elsewhere (such as in another script or " @@ -774,7 +644,7 @@ msgstr "" "ressource. Notez que cette méthode nécessite que [param path] soit un " "[String] constant. Si vous voulez charger une ressource depuis un chemin " "variable/dynamique, utilisez [method load].\n" -"[b]Note :[/b] Les chemins des ressources peuvent être obtenus en cliquant " +"[b]Note :[/b] Les chemins des ressources peuvent être obtenus en cliquant " "avec le bouton droit sur la ressource dans la fenêtre des Assets puis en " "choisissant \"Copier le chemin\", ou en faisant glisser le fichier depuis la " "fenêtre \"Système de fichiers\" vers le script courant.\n" @@ -782,7 +652,7 @@ msgstr "" "# Créer une instance d'une scène.\n" "var diamant = preload(\"res://diamant.tscn\").instantiate()\n" "[/codeblock]\n" -"[b]Note:[/b] [method preload] est un mot-clé, pas une fonction. Vous ne " +"[b]Note :[/b] [method preload] est un mot-clé, pas une fonction. Vous ne " "pouvez donc pas y accéder en tant que [Callable]." msgid "" @@ -806,6 +676,35 @@ msgstr "" "[b]Note: [/b] Appeler cette fonction depuis un [Thread] n'est pas supporté. " "Le faire imprimerait alors l'ID du thread." +msgid "" +"Prints a stack trace at the current code location. See also [method " +"get_stack].\n" +"The output in the console may look like the following:\n" +"[codeblock lang=text]\n" +"Frame 0 - res://test.gd:16 in function '_process'\n" +"[/codeblock]\n" +"[b]Note:[/b] This function only works if the running instance is connected to " +"a debugging server (i.e. an editor instance). [method print_stack] will not " +"work in projects exported in release mode, or in projects exported in debug " +"mode if not connected to a debugging server.\n" +"[b]Note:[/b] Calling this function from a [Thread] is not supported. Doing so " +"will instead print the thread ID." +msgstr "" +"Affiche une trace d'appels à l'emplacement actuel du code. Voir également " +"[method get_stack].\n" +"Le résultat dans le terminal pourrait ressembler à l'exemple suivant :\n" +"[codeblock lang=text]\n" +"Frame 0 - res://test.gd:16 in function '_process'\n" +"[/codeblock]\n" +"[b]Note :[/b] Cette fonction marche uniquement si l'instance en cours " +"d’exécution est connectée à un serveur de débogage (par ex. une instance " +"d'éditeur). [method print_stack] ne fonctionnera pas dans les projets " +"exportés en mode publication, ou dans des projets exportés en mode débogage " +"s'il n'est pas connecté à un serveur de débogage.\n" +"[b]Note :[/b] Cette fonction ne peut pas être appelée depuis un [Thread]. Si " +"vous le faites quand même, l'ID du thread sera affiché au lieu de la trace " +"d'appels." + msgid "" "Returns [code]true[/code] if the given [Object]-derived class exists in " "[ClassDB]. Note that [Variant] data types are not registered in [ClassDB].\n" @@ -888,6 +787,85 @@ msgstr "" "un nombre entier [code]0[/code] par [code]0[/code] ne donnera pas un " "[constant NAN] et mais une erreur d’exécution à la place." +msgid "" +"Mark the following property as exported (editable in the Inspector dock and " +"saved to disk). To control the type of the exported property, use the type " +"hint notation.\n" +"[codeblock]\n" +"extends Node\n" +"\n" +"enum Direction {LEFT, RIGHT, UP, DOWN}\n" +"\n" +"# Built-in types.\n" +"@export var string = \"\"\n" +"@export var int_number = 5\n" +"@export var float_number: float = 5\n" +"\n" +"# Enums.\n" +"@export var type: Variant.Type\n" +"@export var format: Image.Format\n" +"@export var direction: Direction\n" +"\n" +"# Resources.\n" +"@export var image: Image\n" +"@export var custom_resource: CustomResource\n" +"\n" +"# Nodes.\n" +"@export var node: Node\n" +"@export var custom_node: CustomNode\n" +"\n" +"# Typed arrays.\n" +"@export var int_array: Array[int]\n" +"@export var direction_array: Array[Direction]\n" +"@export var image_array: Array[Image]\n" +"@export var node_array: Array[Node]\n" +"[/codeblock]\n" +"[b]Note:[/b] Custom resources and nodes should be registered as global " +"classes using [code]class_name[/code], since the Inspector currently only " +"supports global classes. Otherwise, a less specific type will be exported " +"instead.\n" +"[b]Note:[/b] Node export is only supported in [Node]-derived classes and has " +"a number of other limitations." +msgstr "" +"Marquez la propriété suivante comme exportée (modifiable dans le dock " +"Inspecteur et enregistrée sur le disque). Pour contrôler le type de la " +"propriété exportée, utilisez la notation d'indication de type.\n" +"[codeblock]\n" +"extends Node\n" +"\n" +"enum Direction {LEFT, RIGHT, UP, DOWN}\n" +"\n" +"# Types intégrés.\n" +"@export var string = \"\"\n" +"@export var int_number = 5\n" +"@export var float_number: float = 5\n" +"\n" +"# Enums.\n" +"@export var type: Variant.Type\n" +"@export var format: Image.Format\n" +"@export var direction: Direction\n" +"\n" +"# Ressources.\n" +"@export var image: Image\n" +"@export var custom_resource: CustomResource\n" +"\n" +"# Nœuds.\n" +"@export var node: Node\n" +"@export var custom_node: CustomNode\n" +"\n" +"# Tableaux typés.\n" +"@export var int_array : Array[int]\n" +"@export var direction_array : Array[Direction]\n" +"@export var image_array : Array[Image]\n" +"@export var node_array : Array[Node]\n" +"[/codeblock]\n" +"[b]Remarque :[/b] Les ressources et nœuds personnalisés doivent être " +"enregistrés en tant que classes globales à l'aide de [code]class_name[/code], " +"car l'inspecteur ne prend actuellement en charge que les classes globales. " +"Sinon, un type moins spécifique sera exporté à la place.\n" +"[b]Remarque :[/b] L'exportation de nœuds n'est prise en charge que dans les " +"classes dérivées de [Node] et présente un certain nombre d'autres limitations." + msgid "" "Define a new category for the following exported properties. This helps to " "organize properties in the Inspector dock.\n" @@ -932,6 +910,419 @@ msgstr "" "@export_color_no_alpha var dye_colors: Array[Color]\n" "[/codeblock]" +msgid "" +"Allows you to set a custom hint, hint string, and usage flags for the " +"exported property. Note that there's no validation done in GDScript, it will " +"just pass the parameters to the editor.\n" +"[codeblock]\n" +"@export_custom(PROPERTY_HINT_NONE, \"suffix:m\") var suffix: Vector3\n" +"[/codeblock]\n" +"[b]Note:[/b] Regardless of the [param usage] value, the [constant " +"PROPERTY_USAGE_SCRIPT_VARIABLE] flag is always added, as with any explicitly " +"declared script variable." +msgstr "" +"Vous permet de définir un indice personnalisé, une chaîne d'indice et des " +"drapeaux d'utilisation pour la propriété exportée. Notez qu'aucune validation " +"n'est effectuée dans GDScript, il transmettra simplement les paramètres à " +"l'éditeur.\n" +"[codeblock]\n" +"@export_custom(PROPERTY_HINT_NONE, \"suffix:m\") var suffix: Vector3\n" +"[/codeblock]\n" +"[b]Remarque :[/b] Quelle que soit la valeur de [param usage], le " +"drapeau[constant PROPERTY_USAGE_SCRIPT_VARIABLE] est toujours ajouté, comme " +"pour toute variable de script explicitement déclarée." + +msgid "" +"Export a [String], [Array][lb][String][rb], or [PackedStringArray] property " +"as a path to a directory. The path will be limited to the project folder and " +"its subfolders. See [annotation @export_global_dir] to allow picking from the " +"entire filesystem.\n" +"See also [constant PROPERTY_HINT_DIR].\n" +"[codeblock]\n" +"@export_dir var sprite_folder_path: String\n" +"@export_dir var sprite_folder_paths: Array[String]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété [String], [Array][lb][String][rb], or " +"[PackedStringArray] en tant que chemin d'accès à un répertoire. Le chemin " +"sera limité au dossier du projet et à ses sous-dossiers. Voir [annotation " +"@export_global_dir] pour permettre de choisir dans l'ensemble du système de " +"fichiers.\n" +"Voir aussi [constant PROPERTY_HINT_DIR].\n" +"[codeblock]\n" +"@export_dir var sprite_folder_path: String\n" +"@export_dir var sprite_folder_paths: Array[String]\n" +"[/codeblock]" + +msgid "" +"Export an [int], [String], [Array][lb][int][rb], [Array][lb][String][rb], " +"[PackedByteArray], [PackedInt32Array], [PackedInt64Array], or " +"[PackedStringArray] property as an enumerated list of options (or an array of " +"options). If the property is an [int], then the index of the value is stored, " +"in the same order the values are provided. You can add explicit values using " +"a colon. If the property is a [String], then the value is stored.\n" +"See also [constant PROPERTY_HINT_ENUM].\n" +"[codeblock]\n" +"@export_enum(\"Warrior\", \"Magician\", \"Thief\") var character_class: int\n" +"@export_enum(\"Slow:30\", \"Average:60\", \"Very Fast:200\") var " +"character_speed: int\n" +"@export_enum(\"Rebecca\", \"Mary\", \"Leah\") var character_name: String\n" +"\n" +"@export_enum(\"Sword\", \"Spear\", \"Mace\") var character_items: Array[int]\n" +"@export_enum(\"double_jump\", \"climb\", \"dash\") var character_skills: " +"Array[String]\n" +"[/codeblock]\n" +"If you want to set an initial value, you must specify it explicitly:\n" +"[codeblock]\n" +"@export_enum(\"Rebecca\", \"Mary\", \"Leah\") var character_name: String = " +"\"Rebecca\"\n" +"[/codeblock]\n" +"If you want to use named GDScript enums, then use [annotation @export] " +"instead:\n" +"[codeblock]\n" +"enum CharacterName {REBECCA, MARY, LEAH}\n" +"@export var character_name: CharacterName\n" +"\n" +"enum CharacterItem {SWORD, SPEAR, MACE}\n" +"@export var character_items: Array[CharacterItem]\n" +"[/codeblock]" +msgstr "" +"Exportez une propriété [int], [String], [Array][lb][int][rb], [Array][lb]" +"[String][rb], [PackedByteArray], [PackedInt32Array], [PackedInt64Array] ou " +"[PackedStringArray] sous forme de liste énumérée d'options (ou de tableau " +"d'options). Si la propriété est un [int], l'index de la valeur est stocké, " +"dans le même ordre que les valeurs fournies. Vous pouvez ajouter des valeurs " +"explicites à l'aide de deux points. Si la propriété est un [String], la " +"valeur est stockée.\n" +"Voir également [constant PROPERTY_HINT_ENUM].\n" +"[codeblock]\n" +"@export_enum(\"Warrior\", \"Magician\", \"Thief\") var character_class: int\n" +"@export_enum(\"Slow:30\", \"Average:60\", \"Very Fast:200\") var " +"character_speed: int\n" +"@export_enum(\"Rebecca\", \"Mary\", \"Leah\") var character_name: String\n" +"\n" +"@export_enum(\"Sword\", \"Spear\", \"Mace\") var character_items: Array[int]\n" +"@export_enum(\"double_jump\", \"climb\", \"dash\") var character_skills: " +"Array[String]\n" +"[/codeblock]\n" +"Si vous souhaitez définir une valeur initiale, vous devez la spécifier " +"explicitement :\n" +"[codeblock]\n" +"@export_enum(\"Rebecca\", \"Mary\", \"Leah\") var character_name: String = " +"\"Rebecca\"\n" +"[/codeblock]\n" +"Si vous souhaitez utiliser un nom Énumérations GDScript, puis utilisez " +"[annotation @export] à la place :\n" +"[codeblock]\n" +"enum CharacterName {REBECCA, MARY, LEAH}\n" +"@export var character_name : CharacterName\n" +"\n" +"enum CharacterItem {SWORD, SPEAR, MACE}\n" +"@export var character_items : Array[CharacterItem]\n" +"[/codeblock]" + +msgid "" +"Export a floating-point property with an easing editor widget. Additional " +"hints can be provided to adjust the behavior of the widget. " +"[code]\"attenuation\"[/code] flips the curve, which makes it more intuitive " +"for editing attenuation properties. [code]\"positive_only\"[/code] limits " +"values to only be greater than or equal to zero.\n" +"See also [constant PROPERTY_HINT_EXP_EASING].\n" +"[codeblock]\n" +"@export_exp_easing var transition_speed\n" +"@export_exp_easing(\"attenuation\") var fading_attenuation\n" +"@export_exp_easing(\"positive_only\") var effect_power\n" +"@export_exp_easing var speeds: Array[float]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété nombre à virgule avec un widget d'éditeur de courbe. " +"Des aides additionnelles peuvent être ajoutées pour ajuster le comportement " +"de ce widget. [code]\"attenuation\"[/code] retourne la courbe, ce qui la rend " +"plus intuitive pour éditer des propriétés d'atténuation. " +"[code]\"positive_only\"[/code] oblige les valeurs limites à être supérieures " +"ou égales à zéro.\n" +"Voir aussi [constant PROPERTY_HINT_EXP_EASING].\n" +"[codeblock]\n" +"@export_exp_easing var transition_speed\n" +"@export_exp_easing(\"attenuation\") var fading_attenuation\n" +"@export_exp_easing(\"positive_only\") var effect_power\n" +"@export_exp_easing var speeds: Array[float]\n" +"[/codeblock]" + +msgid "" +"Export a [String], [Array][lb][String][rb], or [PackedStringArray] property " +"as a path to a file. The path will be limited to the project folder and its " +"subfolders. See [annotation @export_global_file] to allow picking from the " +"entire filesystem.\n" +"If [param filter] is provided, only matching files will be available for " +"picking.\n" +"See also [constant PROPERTY_HINT_FILE].\n" +"[codeblock]\n" +"@export_file var sound_effect_path: String\n" +"@export_file(\"*.txt\") var notes_path: String\n" +"@export_file var level_paths: Array[String]\n" +"[/codeblock]" +msgstr "" +"Exporter une propriété [String], [Array][lb][String][rb], ou " +"[PackedStringArray] en tant que chemin vers un fichier. Le chemin sera limité " +"au dossier de projet et ses sous-dossiers. Voir [annotation " +"@export_global_file] pour autoriser la sélection depuis l'ensemble du système " +"de fichiers.\n" +"Si [param filter] est fourni, seuls les fichiers correspondants seront " +"disponible à la sélection.\n" +"Voir également [constant PROPERTY_HINT_FILE].\n" +"[codeblock]\n" +"@export_file var sound_effect_path: String\n" +"@export_file(\"*.txt\") var notes_path: String\n" +"@export_file var level_paths: Array[String]\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field. This allows to store several " +"\"checked\" or [code]true[/code] values with one property, and comfortably " +"select them from the Inspector dock.\n" +"See also [constant PROPERTY_HINT_FLAGS].\n" +"[codeblock]\n" +"@export_flags(\"Fire\", \"Water\", \"Earth\", \"Wind\") var spell_elements = " +"0\n" +"[/codeblock]\n" +"You can add explicit values using a colon:\n" +"[codeblock]\n" +"@export_flags(\"Self:4\", \"Allies:8\", \"Foes:16\") var spell_targets = 0\n" +"[/codeblock]\n" +"You can also combine several flags:\n" +"[codeblock]\n" +"@export_flags(\"Self:4\", \"Allies:8\", \"Self and Allies:12\", \"Foes:16\")\n" +"var spell_targets = 0\n" +"[/codeblock]\n" +"[b]Note:[/b] A flag value must be at least [code]1[/code] and at most [code]2 " +"** 32 - 1[/code].\n" +"[b]Note:[/b] Unlike [annotation @export_enum], the previous explicit value is " +"not taken into account. In the following example, A is 16, B is 2, C is 4.\n" +"[codeblock]\n" +"@export_flags(\"A:16\", \"B\", \"C\") var x\n" +"[/codeblock]\n" +"You can also use the annotation on [Array][lb][int][rb], [PackedByteArray], " +"[PackedInt32Array], and [PackedInt64Array]\n" +"[codeblock]\n" +"@export_flags(\"Fire\", \"Water\", \"Earth\", \"Wind\") var phase_elements: " +"Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété entière en tant que champ de bit flag. Cela permet de " +"stocker plusieurs valeurs \"vérifiées\" ou [code]true[/code] avec une " +"propriété, et de les sélectionner aisément depuis la barre d'outils de " +"l'Inspecteur.\n" +"Voir également [constant PROPERTY_HINT_FLAGS].\n" +"[codeblock]\n" +"@export_flags(\"Feu\", \"Eau\", \"Terre\", \"Vent\") var éléments_sort = 0\n" +"[/codeblock]\n" +"Vous pouvez ajouter des valeurs explicites en utilisant les deux-points :\n" +"[codeblock]\n" +"@export_flags(\"Soi:4\", \"Alliés:8\", \"Ennemis:16\") var cibles_sort = 0\n" +"[/codeblock]\n" +"Vous pouvez aussi combiner plusieurs options :\n" +"[codeblock]\n" +"@export_flags(\"Soi:4\", \"Alliés:8\", \"Alliés et soi:12\", \"Ennemis:16\")\n" +"var cibles_sort = 0\n" +"[/codeblock]\n" +"[b]Note :[/b] Une valeur de drapeau doit être au minimum [code]1[/code] et au " +"maximum [code]2 ** 32 - 1[/code].\n" +"[b]Note :[/b] Contrairement à [annotation @export_enum], la valeur explicite " +"précédente n'est pas prise en compte. Dans l'exemple suivant, A est 16, B est " +"2, C est 4.\n" +"[codeblock]\n" +"@export_flags(\"A:16\", \"B\", \"C\") var x\n" +"[/codeblock]\n" +"Vous pouvez aussi l'utiliser cette annotation sur un [Array][lb][int][rb], " +"[PackedByteArray], [PackedInt32Array], ou[PackedInt64Array]\n" +"[codeblock]\n" +"@export_flags(\"Feu\", \"Eau\", \"Terre\", \"Vent\") var phase_elements: " +"Array[int]\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for 2D navigation layers. The " +"widget in the Inspector dock will use the layer names defined in [member " +"ProjectSettings.layer_names/2d_navigation/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_2D_NAVIGATION].\n" +"[codeblock]\n" +"@export_flags_2d_navigation var navigation_layers: int\n" +"@export_flags_2d_navigation var navigation_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété entière en tant qu'une option, un champ bit pour les " +"calques de navigation 2D. Le widget dans la barre d'outils de l'Inspecteur " +"utilisera les noms des calques définis dans [member ProjectSettings." +"layer_names/2d_navigation/layer_1].\n" +"Voir également [constant PROPERTY_HINT_LAYERS_2D_NAVIGATION].\n" +"[codeblock]\n" +"@export_flags_2d_navigation var navigation_layers : int\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for 2D physics layers. The " +"widget in the Inspector dock will use the layer names defined in [member " +"ProjectSettings.layer_names/2d_physics/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_2D_PHYSICS].\n" +"[codeblock]\n" +"@export_flags_2d_physics var physics_layers: int\n" +"@export_flags_2d_physics var physics_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporter une propriété entière sous forme de champ de bit flag pour les " +"couches physiques 2D. Le widget dans la barre d'outils de l'Inspecteur " +"utilisera les noms des calques définis dans [member ProjectSettings." +"layer_names/2d_physics/layer_1].\n" +"Voir également [constant PROPERTY_HINT_LAYERS_2D_PHYSICS].\n" +"[codeblock]\n" +"@export_flags_2d_physics var physics_layers: int\n" +"@export_flags_2d_physics var physics_layers_array: Array[int]\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for 2D render layers. The " +"widget in the Inspector dock will use the layer names defined in [member " +"ProjectSettings.layer_names/2d_render/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_2D_RENDER].\n" +"[codeblock]\n" +"@export_flags_2d_render var render_layers: int\n" +"@export_flags_2d_render var render_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété entière en tant que champ de bit flag pour le calques " +"de rendu 2D. Le widget dans la barre d'outils de l'Inspecteur utilisera les " +"noms des calques définis dans [member ProjectSettings.layer_names/2d_render/" +"layer_1].\n" +"Voir également [constant PROPERTY_HINT_LAYERS_2D_RENDER].\n" +"[codeblock]\n" +"@export_flags_2d_render var render_layers: int\n" +"@export_flags_2d_render var render_layers_array: Array[int]\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for 3D navigation layers. The " +"widget in the Inspector dock will use the layer names defined in [member " +"ProjectSettings.layer_names/3d_navigation/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_3D_NAVIGATION].\n" +"[codeblock]\n" +"@export_flags_3d_navigation var navigation_layers: int\n" +"@export_flags_3d_navigation var navigation_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété [int] en tant que champ de bits pour des couches de " +"navigation 3D. Le widget dans le dock Inspecteur utilisera les noms de couche " +"définis dans [member ProjectSettings.layer_names/3d_navigation/layer_1].\n" +"Voir aussi [constant PROPERTY_HINT_LAYDERS_3D_NAVIGATION].\n" +"[codeblock]\n" +"@export_flags_3d_navigation var navigation_layers : int\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for 3D physics layers. The " +"widget in the Inspector dock will use the layer names defined in [member " +"ProjectSettings.layer_names/3d_physics/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_3D_PHYSICS].\n" +"[codeblock]\n" +"@export_flags_3d_physics var physics_layers: int\n" +"@export_flags_3d_physics var physics_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété [int] en tant que champ de bits pour couches physiques " +"3D. Le widget dans le dock Inspecteur utilisera les noms de couches définis " +"dans [member ProjectSettings.layer_names/3d_physics/layer_1].\n" +"Voir aussi [constant PROPERTY_HINT_LAYERS_3D_PHYSICS].\n" +"[codeblock]\n" +"@export_flags_3d_physics var physics_layers: int\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for 3D render layers. The " +"widget in the Inspector dock will use the layer names defined in [member " +"ProjectSettings.layer_names/3d_render/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_3D_RENDER].\n" +"[codeblock]\n" +"@export_flags_3d_render var render_layers: int\n" +"@export_flags_3d_render var render_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété d'entier en tant que champ de bit flag pour des couches " +"de rendu 3D. Le widget dans le dock Inspecteur utilisera les noms de couches " +"définis dans [member ProjectSettings.layer_names/3d_render/layer_1].\n" +"Voir aussi [constant PROPERTY_HINT_LAYERS_3D_RENDER].\n" +"[codeblock]\n" +"@export_flags_3d_render var render_layers: int\n" +"@export_flags_3d_render var render_layers_array: Array[int]\n" +"[/codeblock]" + +msgid "" +"Export an integer property as a bit flag field for navigation avoidance " +"layers. The widget in the Inspector dock will use the layer names defined in " +"[member ProjectSettings.layer_names/avoidance/layer_1].\n" +"See also [constant PROPERTY_HINT_LAYERS_AVOIDANCE].\n" +"[codeblock]\n" +"@export_flags_avoidance var avoidance_layers: int\n" +"@export_flags_avoidance var avoidance_layers_array: Array[int]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété entière en tant que champ d'option (bit) pour les " +"calques de navigation 2D. Le widget dans la barre d'outils de l'Inspecteur " +"utilisera les noms des calques définis dans [member ProjectSettings." +"layer_names/2d_navigation/layer_1].\n" +"Voir également [constant PROPERTY_HINT_LAYERS_AVOIDANCE].\n" +"[codeblock]\n" +"@export_flags_avoidance var avoidance_layers: int\n" +"@export_flags_avoidance var avoidance_layers_array: Array[int]\n" +"[/codeblock]" + +msgid "" +"Export a [String], [Array][lb][String][rb], or [PackedStringArray] property " +"as an absolute path to a directory. The path can be picked from the entire " +"filesystem. See [annotation @export_dir] to limit it to the project folder " +"and its subfolders.\n" +"See also [constant PROPERTY_HINT_GLOBAL_DIR].\n" +"[codeblock]\n" +"@export_global_dir var sprite_folder_path: String\n" +"@export_global_dir var sprite_folder_paths: Array[String]\n" +"[/codeblock]" +msgstr "" +"Exporter une propriété [String], [Array][lb][String][rb], ou " +"[PackedStringArray] en tant que chemin absolu vers un dossier. Le chemin peut " +"être sélectionné depuis l'entièreté du système de fichiers. Voir [annotation " +"@export_dir] pour le limiter au dossier du projet et ses sous-dossiers.\n" +"Voir aussi [constant PROPERTY_HINT_GLOBAL_DIR].\n" +"[codeblock]\n" +"@export_global_dir var sprite_folder_path: String\n" +"@export_global_dir var sprite_folder_paths: Array[String]\n" +"[/codeblock]" + +msgid "" +"Export a [String], [Array][lb][String][rb], or [PackedStringArray] property " +"as an absolute path to a file. The path can be picked from the entire " +"filesystem. See [annotation @export_file] to limit it to the project folder " +"and its subfolders.\n" +"If [param filter] is provided, only matching files will be available for " +"picking.\n" +"See also [constant PROPERTY_HINT_GLOBAL_FILE].\n" +"[codeblock]\n" +"@export_global_file var sound_effect_path: String\n" +"@export_global_file(\"*.txt\") var notes_path: String\n" +"@export_global_file var multiple_paths: Array[String]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété [String], [Array][lb][String][rb], ou " +"[PackedStringArray] en tant que chemin absolu à un fichier. Le chemin peut " +"être sélectionné depuis l'entièreté du système de fichiers. Voir [annotation " +"@export_file] afin de le limiter au dossier du projet et ses sous-dossiers.\n" +"Si [param filter] est fourni, seul les fichiers correspondant seront " +"disponibles à la sélection.\n" +"Voir aussi [constant PROPERTY_HINT_GLOBAL_FILE].\n" +"[codeblock]\n" +"@export_global_file var sound_effect_path: String\n" +"@export_global_file(\"*.txt\") var notes_path: String\n" +"@export_global_file var multiple_paths: Array[String]\n" +"[/codeblock]" + msgid "" "Define a new group for the following exported properties. This helps to " "organize properties in the Inspector dock. Groups can be added with an " @@ -988,78 +1379,112 @@ msgstr "" "[/codeblock]" msgid "" -"Add a custom icon to the current script. The icon specified at [param " -"icon_path] is displayed in the Scene dock for every node of that class, as " -"well as in various editor dialogs.\n" +"Export a [String], [Array][lb][String][rb], [PackedStringArray], [Dictionary] " +"or [Array][lb][Dictionary][rb] property with a large [TextEdit] widget " +"instead of a [LineEdit]. This adds support for multiline content and makes it " +"easier to edit large amount of text stored in the property.\n" +"See also [constant PROPERTY_HINT_MULTILINE_TEXT].\n" +"[codeblock]\n" +"@export_multiline var character_biography\n" +"@export_multiline var npc_dialogs: Array[String]\n" +"[/codeblock]" +msgstr "" +"Exporte une propriété [String], [Array][lb][String][rb], [PackedStringArray], " +"[Dictionary] ou [Array][lb][Dictionary][rb] avec un widget [TextEdit] large à " +"la place d'un [LineEdit]. Cela ajoute du support pour un contenu multi-ligne " +"et rend plus facile l'édition de beaucoup de texte stocké dans la propriété.\n" +"Voir également [constant PROPERTY_HINT_MULTILINE_TEXT].\n" "[codeblock]\n" -"@icon(\"res://path/to/class/icon.svg\")\n" +"@export_multiline var character_biography\n" +"@export_multiline var npc_dialogs: Array[String]\n" +"[/codeblock]" + +msgid "" +"Export a [NodePath] or [Array][lb][NodePath][rb] property with a filter for " +"allowed node types.\n" +"See also [constant PROPERTY_HINT_NODE_PATH_VALID_TYPES].\n" +"[codeblock]\n" +"@export_node_path(\"Button\", \"TouchScreenButton\") var some_button\n" +"@export_node_path(\"Button\", \"TouchScreenButton\") var many_buttons: " +"Array[NodePath]\n" "[/codeblock]\n" -"[b]Note:[/b] Only the script can have a custom icon. Inner classes are not " -"supported.\n" -"[b]Note:[/b] As annotations describe their subject, the [annotation @icon] " -"annotation must be placed before the class definition and inheritance.\n" -"[b]Note:[/b] Unlike other annotations, the argument of the [annotation @icon] " -"annotation must be a string literal (constant expressions are not supported)." -msgstr "" -"Ajouter un icône personnalisé à ce script. L'icône spécifié à [param " -"icon_path] est montré dans le Scene dock pour chaque nœud de cette class, et " -"dans divers fenêtres de l'éditeur.\n" +"[b]Note:[/b] The type must be a native class or a globally registered script " +"(using the [code]class_name[/code] keyword) that inherits [Node]." +msgstr "" +"Exporte une propriété [NodePath] ou [Array][lb][NodePath][rb] avec un filtre " +"pour les types de nœud autorisés.\n" +"Voir également [constant PROPERTY_HINT_NODE_PATH_VALID_TYPES].\n" "[codeblock]\n" -"@icon(\"res ://path/to/class/icon.svg\")\n" +"@export_node_path(\"Button\", \"TouchScreenButton\") var some_button\n" +"@export_node_path(\"Button\", \"TouchScreenButton\") var many_buttons: " +"Array[NodePath]\n" "[/codeblock]\n" -"[b]Note :[/b] Seulement le script peut avoid un icône personnalisé. Les " -"classes internes ne sont pas supportées.\n" -"[b]Note :[/b] Comme les annotations décrivent leur sujet, l'[annotation " -"@icon] annotation doit être placée avant la définition de la classes et de " -"son héritage.\n" -"[b]Note :[/b] Contrairement aux autres annotations, le paramètre de l' " -"[annotation @icon] annotation doit être un string littéral (expressions " -"constantes ne sont pas supportées)." - -msgid "" -"Mark the following statement to ignore the specified [param warning]. See " -"[url=$DOCS_URL/tutorials/scripting/gdscript/warning_system.html]GDScript " -"warning system[/url].\n" +"[b]Note :[/b] Le type doit être une classe native ou un script enregistré " +"globalement (utilisant le mot-clé [code]class_name[/code] ) qui hérite de " +"[Node]." + +msgid "" +"Export a [String], [Array][lb][String][rb], or [PackedStringArray] property " +"with a placeholder text displayed in the editor widget when no value is " +"present.\n" +"See also [constant PROPERTY_HINT_PLACEHOLDER_TEXT].\n" "[codeblock]\n" -"func test():\n" -" print(\"hello\")\n" -" return\n" -" @warning_ignore(\"unreachable_code\")\n" -" print(\"unreachable\")\n" +"@export_placeholder(\"Name in lowercase\") var character_id: String\n" +"@export_placeholder(\"Name in lowercase\") var friend_ids: Array[String]\n" "[/codeblock]" msgstr "" -"Marquez l'instruction suivante pour ignorer le [param warning] spécifié. Voir " -"[url=$DOCS_URL/tutorials/scripting/gdscript/warning_system.html]GDScript " -"warning system[/url].\n" +"Exporte une propriété [String] avec un emplacement réservé de texte affiché " +"dans le widget d'éditeur widget quand aucune valeur n'est présente.\n" +"Voir également [constant PROPERTY_HINT_PLACEHOLDER_TEXT].\n" "[codeblock]\n" -"func test():\n" -" print(\"hello\")\n" -" return\n" -" @warning_ignore(\"unreachable_code\")\n" -" print(\"unreachable\")\n" +"@export_placeholder(\"Nom en minuscule\") var character_id: String\n" +"@export_placeholder(\"Nom en minuscule\") var friend_ids: Array[String]\n" "[/codeblock]" +msgid "" +"Make a script with static variables to not persist after all references are " +"lost. If the script is loaded again the static variables will revert to their " +"default values.\n" +"[b]Note:[/b] As annotations describe their subject, the [annotation " +"@static_unload] annotation must be placed before the class definition and " +"inheritance.\n" +"[b]Warning:[/b] Currently, due to a bug, scripts are never freed, even if " +"[annotation @static_unload] annotation is used." +msgstr "" +"Créez un script avec des variables statiques pour ne pas persister après la " +"perte de toutes les références. Si le script est à nouveau chargé, les " +"variables statiques reviendront à leurs valeurs par défaut.\n" +"[b]Remarque :[/b] Comme les annotations décrivent leur sujet, l'annotation " +"[annotation @static_unload] doit être placée avant la définition et " +"l'héritage de la classe.\n" +"[b]Attention :[/b] Actuellement, en raison d'un bug, les scripts ne sont " +"jamais libérés, même si l'annotation [annotation @static_unload] est utilisée." + +msgid "" +"Mark the current script as a tool script, allowing it to be loaded and " +"executed by the editor. See [url=$DOCS_URL/tutorials/plugins/" +"running_code_in_the_editor.html]Running code in the editor[/url].\n" +"[codeblock]\n" +"@tool\n" +"extends Node\n" +"[/codeblock]\n" +"[b]Note:[/b] As annotations describe their subject, the [annotation @tool] " +"annotation must be placed before the class definition and inheritance." +msgstr "" +"Marque le script actuel comme script d'outil, lui permettant d'être chargé et " +"exécuté par l'éditeur. Voir [url=$DOCS_URL/tutorials/plugins/" +"running_code_in_the_editor.html]Exécution de code dans l'éditeur[/url].\n" +"[bloc de code]\n" +"@outil\n" +"étend le nœud\n" +"[/bloc de code]\n" +"[b]Remarque :[/b] Comme les annotations décrivent leur sujet, l'annotation " +"[annotation @tool] doit être placée avant la définition et l'héritage de la " +"classe." + msgid "Global scope constants and functions." msgstr "Constantes et fonction à portée globale." -msgid "" -"A list of global scope enumerated constants and built-in functions. This is " -"all that resides in the globals, constants regarding error codes, keycodes, " -"property hints, etc.\n" -"Singletons are also documented here, since they can be accessed from " -"anywhere.\n" -"For the entries related to GDScript which can be accessed in any script see " -"[@GDScript]." -msgstr "" -"Constantes et variables globales. Ceci concerne tout ce qui est contenu dans " -"le registre global (accessible depuis n'importe quel script) : constantes de " -"codes d'erreur, codes des touches du clavier, indices de configuration des " -"propriétés, etc.\n" -"Comme ils peuvent être accessibles de partout, les singletons sont aussi " -"documentés ici.\n" -"Pour les entrées liées à GDScript accessibles dans n'importe quel script, " -"voir [@GDScript]." - msgid "Random number generation" msgstr "Génération de nombres aléatoires" @@ -1111,16 +1536,6 @@ msgstr "" "var c = acos(0.866025)\n" "[/codeblock]" -msgid "" -"Returns the difference between the two angles, in the range of [code][-PI, " -"+PI][/code]. When [param from] and [param to] are opposite, returns [code]-" -"PI[/code] if [param from] is smaller than [param to], or [code]PI[/code] " -"otherwise." -msgstr "" -"Retourne la différence entre deux angles, dans l'intervalle [code][-PI, +PI][/" -"code]. Quand [param from] et [param to ] sont opposé, est retourné [code]-PI[/" -"code] si [param from] est plus petit que [param to], ou sinon [code]PI[/code]." - msgid "" "Returns the arc sine of [param x] in radians. Use to get the angle of sine " "[param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/" @@ -1140,6 +1555,100 @@ msgstr "" "var s = asin(0.5)\n" "[/codeblock]" +msgid "" +"Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle " +"of tangent [code]y/x[/code]. To compute the value, the method takes into " +"account the sign of both arguments in order to determine the quadrant.\n" +"Important note: The Y coordinate comes first, by convention.\n" +"[codeblock]\n" +"var a = atan2(0, -1) # a is 3.141593\n" +"[/codeblock]" +msgstr "" +"Renvoie la tangente inverse de [code]y/x[/code] en radians. Utilisez ceci " +"pour obtenir l'angle de la tangente [code]y/x[/code]. Pour calculer la " +"valeur, la méthode prend en compte le signe des deux arguments afin de " +"déterminer l'arc de cercle.\n" +"Note importante : La coordonnée Y est en premier, par convention.\n" +"[codeblock]\n" +"a = atan2(0, -1) # a vaut 3.141593\n" +"[/codeblock]" + +msgid "" +"Returns the hyperbolic arc (also called inverse) tangent of [param x], " +"returning a value in radians. Use it to get the angle from an angle's tangent " +"in hyperbolic space if [param x] is between -1 and 1 (non-inclusive).\n" +"In mathematics, the inverse hyperbolic tangent is only defined for -1 < " +"[param x] < 1 in the real set, so values equal or lower to -1 for [param x] " +"return negative [constant @GDScript.INF] and values equal or higher than 1 " +"return positive [constant @GDScript.INF] in order to prevent [method atanh] " +"from returning [constant @GDScript.NAN].\n" +"[codeblock]\n" +"var a = atanh(0.9) # Returns 1.47221948958322\n" +"tanh(a) # Returns 0.9\n" +"\n" +"var b = atanh(-2) # Returns -inf\n" +"tanh(b) # Returns -1\n" +"[/codeblock]" +msgstr "" +"Renvoie l'arc hyperbolique tangent (également appelé tangente hyperbolique " +"inverse) de [param x], renvoyant une valeur en radians. Utilisez-le pour " +"obtenir l'angle de la tangente d'un angle dans l'espace hyperbolique si " +"[param x] est compris entre -1 et 1 (non inclus).\n" +"En mathématiques, la tangente hyperbolique inverse n'est définie que pour -1 " +"< [param x] < 1 dans l'ensemble réel, donc les valeurs égales ou inférieures " +"à -1 pour [param x] renvoient une [constante @GDScript.INF] négative et des " +"valeurs égales ou supérieur à 1 renvoie une [constante @GDScript.INF] " +"positive afin d'empêcher [méthode atanh] de renvoyer [constante @GDScript." +"NAN].\n" +"[codeblock]\n" +"var a = atanh(0.9) # Renvoie 1,47221948958322\n" +"tanh(a) # Renvoie 0,9\n" +"\n" +"var b = atanh(-2) # Renvoie -inf\n" +"tanh(b) # Renvoie -1\n" +"[/codeblock]" + +msgid "" +"Returns the derivative at the given [param t] on a one-dimensional " +"[url=https://en.wikipedia.org/wiki/B%C3%A9zier_curve]Bézier curve[/url] " +"defined by the given [param control_1], [param control_2], and [param end] " +"points." +msgstr "" +"Renvoie la dérivée au paramètre [param t] dans une [https://fr.wikipedia.org/" +"wiki/Courbe_de_B%C3%A9zier]courbe de Bézier[/url] unidimensionnelle donnée " +"par les points [param control_1],[param control_2] et [param end]." + +msgid "" +"Returns the point at the given [param t] on a one-dimensional [url=https://en." +"wikipedia.org/wiki/B%C3%A9zier_curve]Bézier curve[/url] defined by the given " +"[param control_1], [param control_2], and [param end] points." +msgstr "" +"Renvoie le point au paramètre [param t] dans une [https://fr.wikipedia.org/" +"wiki/Courbe_de_B%C3%A9zier]courbe de Bézier[/url] unidimensionnelle donnée " +"par les points [param control_1],[param control_2] et [param end]." + +msgid "" +"Decodes a byte array back to a [Variant] value, without decoding objects.\n" +"[b]Note:[/b] If you need object deserialization, see [method " +"bytes_to_var_with_objects]." +msgstr "" +"Décode un tableau d'octets en une valeur [Variant], sans décoder les objets.\n" +"[b]Remarque :[/b] Si vous avez besoin d'une désérialisation d'objet, " +"consultez [method bytes_to_var_with_objects]." + +msgid "" +"Decodes a byte array back to a [Variant] value. Decoding objects is allowed.\n" +"[b]Warning:[/b] Deserialized object can contain code which gets executed. Do " +"not use this option if the serialized object comes from untrusted sources to " +"avoid potential security threats (remote code execution)." +msgstr "" +"Décode un tableau d'octets pour le ramener à une valeur [Variant]. Le " +"décodage d'objets est autorisé.\n" +"[b]Attention :[/b] L'objet désérialisé peut contenir du code qui sera " +"exécuté. N'utilisez pas cette option si l'objet désérialisé provient de " +"sources non fiables afin d'éviter d'éventuelles menaces de sécurité " +"(exécution de code distant)." + msgid "" "Rounds [param x] upward (towards positive infinity), returning the smallest " "whole number that is not less than [param x].\n" @@ -1218,6 +1727,311 @@ msgstr "" msgid "Converts from decibels to linear energy (audio)." msgstr "Convertit les décibels en énergie linéaire (audio)." +msgid "" +"Prints one or more arguments to strings in the best way possible to standard " +"error line.\n" +"[codeblocks]\n" +"[gdscript]\n" +"printerr(\"prints to stderr\")\n" +"[/gdscript]\n" +"[csharp]\n" +"GD.PrintErr(\"prints to stderr\");\n" +"[/csharp]\n" +"[/codeblocks]" +msgstr "" +"Affiche un ou plusieurs arguments en chaînes de caractères de la meilleure " +"façon possible sur la ligne d'erreur.\n" +"[codeblocks]\n" +"[gdscript]\n" +"printerr(\"affiche sur stderr\")\n" +"[/gdscript]\n" +"[csharp]\n" +"GD.PrintErr(\"affiche sur stderr\");\n" +"[/csharp]\n" +"[/codeblocks]" + +msgid "" +"Returns a [url=https://en.wikipedia.org/wiki/Normal_distribution]normally-" +"distributed[/url], pseudo-random floating-point value from the specified " +"[param mean] and a standard [param deviation]. This is also known as a " +"Gaussian distribution.\n" +"[b]Note:[/b] This method uses the [url=https://en.wikipedia.org/wiki/" +"Box%E2%80%93Muller_transform]Box-Muller transform[/url] algorithm." +msgstr "" +"Renvoie une valeur flottante pseudo-aléatoire d'une loi [url=https://fr." +"wikipedia.org/wiki/Loi_normale]normale[/url] ayant comme moyenne [param mean] " +"et comme déviation standard [param deviation]. Aussi connue sous le nom de " +"loi Gaussienne.\n" +"[b]Note :[/b] Cette méthode utilise l'algorithme de [url=https://fr.wikipedia." +"org/wiki/M%C3%A9thode_de_Box-Muller]tranformation de Box-Muller[/url]." + +msgid "" +"Randomizes the seed (or the internal state) of the random number generator. " +"The current implementation uses a number based on the device's time.\n" +"[b]Note:[/b] This function is called automatically when the project is run. " +"If you need to fix the seed to have consistent, reproducible results, use " +"[method seed] to initialize the random number generator." +msgstr "" +"Randomise la graine (ou état interne) du générateur de nombres aléatoires. " +"L'implémentation actuelle utilise un nombre basé sur l'horloge de " +"l'appareil.\n" +"[b]Note :[/b] Cette fonction est invoquée automatiquement lorsque le projet " +"est exécuté. Si vous avez besoin de fixer la graine pour avoir des résultats " +"consistants et reproductibles, utilisez [method seed] pour initialiser le " +"générateur de nombres aléatoires." + +msgid "" +"Allocates a unique ID which can be used by the implementation to construct an " +"RID. This is used mainly from native extensions to implement servers." +msgstr "" +"Alloue un ID unique qui peut être utilisé par l'implémentation pour " +"construire un RID. Principalement utilisé depuis des extensions natives pour " +"implémenter des serveurs." + +msgid "" +"Creates an RID from a [param base]. This is used mainly from native " +"extensions to build servers." +msgstr "" +"Crée un RID depuis une [param base]. Principalement utilisé depuis des " +"extensions natives pour compiler des serveurs." + +msgid "" +"Rounds [param x] to the nearest whole number, with halfway cases rounded away " +"from 0.\n" +"A type-safe version of [method round], returning a [float]." +msgstr "" +"Arrondit [param x] vers l'entier le plus proche, avec les demis exacts " +"arrondis à l'opposé de 0.\n" +"Une version typée de [method round], renvoyant un [float]." + +msgid "" +"Sets the seed for the random number generator to [param base]. Setting the " +"seed manually can ensure consistent, repeatable results for most random " +"functions.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var my_seed = \"Godot Rocks\".hash()\n" +"seed(my_seed)\n" +"var a = randf() + randi()\n" +"seed(my_seed)\n" +"var b = randf() + randi()\n" +"# a and b are now identical\n" +"[/gdscript]\n" +"[csharp]\n" +"ulong mySeed = (ulong)GD.Hash(\"Godot Rocks\");\n" +"GD.Seed(mySeed);\n" +"var a = GD.Randf() + GD.Randi();\n" +"GD.Seed(mySeed);\n" +"var b = GD.Randf() + GD.Randi();\n" +"// a and b are now identical\n" +"[/csharp]\n" +"[/codeblocks]" +msgstr "" +"Définit la graine pour le générateur de nombres aléatoires à [param base]. " +"Définir la graine manuellement garantit des résultats consistants et " +"répétables pour la plupart des fonctions aléatoires.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var my_seed = \"Godot Rocks\".hash()\n" +"seed(my_seed)\n" +"var a = randf() + randi()\n" +"seed(my_seed)\n" +"var b = randf() + randi()\n" +"# a et b sont maintenant identiques\n" +"[/gdscript]\n" +"[csharp]\n" +"ulong mySeed = (ulong)GD.Hash(\"Godot Rocks\");\n" +"GD.Seed(mySeed);\n" +"var a = GD.Randf() + GD.Randi();\n" +"GD.Seed(mySeed);\n" +"var b = GD.Randf() + GD.Randi();\n" +"// a et b sont maintenant identiques\n" +"[/csharp]\n" +"[/codeblocks]" + +msgid "" +"Returns the same type of [Variant] as [param x], with [code]-1[/code] for " +"negative values, [code]1[/code] for positive values, and [code]0[/code] for " +"zeros. For [code]nan[/code] values it returns 0.\n" +"Supported types: [int], [float], [Vector2], [Vector2i], [Vector3], " +"[Vector3i], [Vector4], [Vector4i].\n" +"[codeblock]\n" +"sign(-6.0) # Returns -1\n" +"sign(0.0) # Returns 0\n" +"sign(6.0) # Returns 1\n" +"sign(NAN) # Returns 0\n" +"\n" +"sign(Vector3(-6.0, 0.0, 6.0)) # Returns (-1, 0, 1)\n" +"[/codeblock]\n" +"[b]Note:[/b] For better type safety, use [method signf], [method signi], " +"[method Vector2.sign], [method Vector2i.sign], [method Vector3.sign], [method " +"Vector3i.sign], [method Vector4.sign], or [method Vector4i.sign]." +msgstr "" +"Renvoie le même type de [Variant] que [param x], avec [code]-1[/code] pour " +"des valeurs négatives, [code]1[/code] pour des valeurs positives, et [code]0[/" +"code] pour des zéros. Pour un [code]nan[/code], renvoie 0.\n" +"Types supportés : [int], [float], [Vector2], [Vector2i], [Vector3], " +"[Vector3i], [Vector4], [Vector4i].\n" +"[codeblock]\n" +"sign(-6.0) # Renvoie -1\n" +"sign(0.0) # Renvoie 0\n" +"sign(6.0) # Renvoie 1\n" +"sign(NAN) # Renvoie 0\n" +"\n" +"sign(Vector3(-6.0, 0.0, 6.0)) # Renvoie (-1, 0, 1)\n" +"[/codeblock]\n" +"[b]Note :[/b] Pour une meilleure sécurité de typage, utiliser [method signf], " +"[method signi], [method Vector2.sign], [method Vector2i.sign], [method " +"Vector3.sign], [method Vector3i.sign], [method Vector4.sign], ou [method " +"Vector4i.sign]." + +msgid "" +"Returns [code]-1.0[/code] if [param x] is negative, [code]1.0[/code] if " +"[param x] is positive, and [code]0.0[/code] if [param x] is zero. For " +"[code]nan[/code] values of [param x] it returns 0.0.\n" +"[codeblock]\n" +"signf(-6.5) # Returns -1.0\n" +"signf(0.0) # Returns 0.0\n" +"signf(6.5) # Returns 1.0\n" +"signf(NAN) # Returns 0.0\n" +"[/codeblock]" +msgstr "" +"Renvoie [code]-1.0[/code] si [param x] est négatif, [code]1.0[/code] si " +"[param x] est positif, et[code]0.0[/code] si [param x] vaut zéro. Pour des " +"valeurs [code]nan[/code] de [param x], renvoie 0.0.\n" +"[codeblock]\n" +"signf(-6.5) # Renvoie -1.0\n" +"signf(0.0) # Renvoie 0.0\n" +"signf(6.5) # Renvoie 1.0\n" +"signf(NAN) # Renvoie 0.0\n" +"[/codeblock]" + +msgid "" +"Returns the sine of angle [param angle_rad] in radians.\n" +"[codeblock]\n" +"sin(0.523599) # Returns 0.5\n" +"sin(deg_to_rad(90)) # Returns 1.0\n" +"[/codeblock]" +msgstr "" +"Renvoie le sinus de l'angle [param angle_rad] en radians.\n" +"[codeblock]\n" +"sin(0.523599) # Retourne 0,5\n" +"sin(deg_to_rad(90)) # Renvoie 1.0\n" +"[/codeblock]" + +msgid "" +"Returns the hyperbolic sine of [param x].\n" +"[codeblock]\n" +"var a = log(2.0) # Returns 0.693147\n" +"sinh(a) # Returns 0.75\n" +"[/codeblock]" +msgstr "" +"Renvoie le sinus hyperbolique de [param x].\n" +"[codeblock]\n" +"a = log(2.0) # Renvoie 0.693147\n" +"sinh(a) # Renvoie 0.75\n" +"[/codeblock]" + +msgid "" +"Returns the multiple of [param step] that is the closest to [param x]. This " +"can also be used to round a floating-point number to an arbitrary number of " +"decimals.\n" +"A type-safe version of [method snapped], returning a [float].\n" +"[codeblock]\n" +"snappedf(32.0, 2.5) # Returns 32.5\n" +"snappedf(3.14159, 0.01) # Returns 3.14\n" +"[/codeblock]" +msgstr "" +"Renvoie le multiple de [param step] qui est le plus proche de [param x]. Cela " +"peut être utilisé pour arrondir un flottant à un nombre arbitraire de " +"décimales.\n" +"Une version typée de [method snapped], renvoyant un [float].\n" +"[codeblock]\n" +"snappedf(32.0, 2.5) # Renvoie 32.5\n" +"snappedf(3.14159, 0.01) # Renvoie 3.14\n" +"[/codeblock]" + +msgid "" +"Returns the multiple of [param step] that is the closest to [param x].\n" +"A type-safe version of [method snapped], returning an [int].\n" +"[codeblock]\n" +"snappedi(53, 16) # Returns 48\n" +"snappedi(4096, 100) # Returns 4100\n" +"[/codeblock]" +msgstr "" +"Renvoie le multiple de [param step] qui est le plus proche de [param x].\n" +"Une version de typée de [method snapped], renvoyant un [int].\n" +"[codeblock]\n" +"snappedi(53, 16) # Renvoie 48\n" +"snappedi(4096, 100) # Renvoie 4100\n" +"[/codeblock]" + +msgid "" +"Converts the given [param variant] to the given [param type], using the [enum " +"Variant.Type] values. This method is generous with how it handles types, it " +"can automatically convert between array types, convert numeric [String]s to " +"[int], and converting most things to [String].\n" +"If the type conversion cannot be done, this method will return the default " +"value for that type, for example converting [Rect2] to [Vector2] will always " +"return [constant Vector2.ZERO]. This method will never show error messages as " +"long as [param type] is a valid Variant type.\n" +"The returned value is a [Variant], but the data inside and its type will be " +"the same as the requested type.\n" +"[codeblock]\n" +"type_convert(\"Hi!\", TYPE_INT) # Returns 0\n" +"type_convert(\"123\", TYPE_INT) # Returns 123\n" +"type_convert(123.4, TYPE_INT) # Returns 123\n" +"type_convert(5, TYPE_VECTOR2) # Returns (0, 0)\n" +"type_convert(\"Hi!\", TYPE_NIL) # Returns null\n" +"[/codeblock]" +msgstr "" +"Convertit la [param variant] donnée en le [param type] donné, en utilisant la " +"valeur de [enum Variant.Type]. Cette méthode est généreuse avec la façon dont " +"elle gère les types, elle peut automatiquement convertir entre les types de " +"tableaux, convertir les [String] numériques en [int], et convertir la plupart " +"des choses en [String].\n" +"Si la conversion de type ne peut être effectuée, cette méthode retournera la " +"valeur par défaut pour ce type, par exemple convertir [Rect2] en [Vector2] " +"retournera toujours [constant Vector2.ZERO]. Cette méthode n'affichera jamais " +"de messages d'erreur tant que [param type] est un type Variant valide.\n" +"La valeur renvoyée est un [Variant], mais les données à l'intérieur et leurs " +"types seront les mêmes que le type demandé.\n" +"[codeblock]\n" +"type_convert(\"Hi!\", TYPE_INT) # Renvoie 0\n" +"type_convert(\"123\", TYPE_INT) # Renvoie 123\n" +"type_convert(123.4, TYPE_INT) # Renvoie 123\n" +"type_convert(5, TYPE_VECTOR2) # Renvoie (0, 0)\n" +"type_convert(\"Hi!\", TYPE_NIL) # Renvoie null\n" +"[/codeblock]" + +msgid "" +"Encodes a [Variant] value to a byte array, without encoding objects. " +"Deserialization can be done with [method bytes_to_var].\n" +"[b]Note:[/b] If you need object serialization, see [method " +"var_to_bytes_with_objects].\n" +"[b]Note:[/b] Encoding [Callable] is not supported and will result in an empty " +"value, regardless of the data." +msgstr "" +"Encode une valeur de [Variant] en un tableau de bytes, sans encoder les " +"objets. La désérialisation peut être faite avec [method bytes_to_var].\n" +"[b]Note :[/b] Si vous avez besoin de serialisation d'objets, voir [method " +"var_to_bytes_with_objects].\n" +"[b]Note :[/b] Encoder [Callable] n'est pas supporté et va renvoyer une valeur " +"vide, peu importe les données." + +msgid "" +"Encodes a [Variant] value to a byte array. Encoding objects is allowed (and " +"can potentially include executable code). Deserialization can be done with " +"[method bytes_to_var_with_objects].\n" +"[b]Note:[/b] Encoding [Callable] is not supported and will result in an empty " +"value, regardless of the data." +msgstr "" +"Encode une valeur [Variant] en un tableau d'octets. L'encodage d'objets est " +"autorisé (et peut éventuellement inclure du code exécutable). La " +"désérialisation peut être faite avec [method bytes_to_var_with_objects].\n" +"[b]Note :[/b] Encoder [Callable] n'est pas pris en charge et renverra une " +"valeur vide, peu importe les données." + msgid "The [AudioServer] singleton." msgstr "Le singleton [AudioServer]." @@ -1227,9 +2041,24 @@ msgstr "Le singleton [CameraServer]." msgid "The [ClassDB] singleton." msgstr "Le singleton [ClassDB]." +msgid "The [DisplayServer] singleton." +msgstr "Le singleton [DisplayServer]." + msgid "The [Engine] singleton." msgstr "Le singleton [Engine]." +msgid "The [EngineDebugger] singleton." +msgstr "Le singleton [EngineDebugger]." + +msgid "The [GDExtensionManager] singleton." +msgstr "Le singleton [GDExtensionManager]." + +msgid "The [Geometry2D] singleton." +msgstr "Le singleton [Geometry2D]." + +msgid "The [Geometry3D] singleton." +msgstr "Le singleton [Geometry3D]." + msgid "The [IP] singleton." msgstr "Le singleton [IP]." @@ -1252,21 +2081,48 @@ msgstr "Le singleton [Marshalls]." msgid "The [NavigationMeshGenerator] singleton." msgstr "Le singleton du [NavigationMeshGenerator]." +msgid "The [NavigationServer2D] singleton." +msgstr "Le singleton [NavigationServer2D]." + msgid "The [OS] singleton." msgstr "Le singleton [OS]." msgid "The [Performance] singleton." msgstr "Le singleton [Performance]." +msgid "The [PhysicsServer2D] singleton." +msgstr "Le singleton [PhysicsServer2D]." + +msgid "The [PhysicsServer2DManager] singleton." +msgstr "Le singleton [PhysicsServer2DManager]." + +msgid "The [PhysicsServer3D] singleton." +msgstr "Le singleton [PhysicsServer3D]." + +msgid "The [PhysicsServer3DManager] singleton." +msgstr "Le singleton [PhysicsServer3DManager]." + msgid "The [ProjectSettings] singleton." msgstr "Le singleton [ProjectSettings]." +msgid "The [RenderingServer] singleton." +msgstr "Le singleton [RenderingServer]." + msgid "The [ResourceLoader] singleton." msgstr "Le singleton [ResourceLoader]." msgid "The [ResourceSaver] singleton." msgstr "Le singleton [ResourceLoader]." +msgid "The [ResourceUID] singleton." +msgstr "Le singleton [ResourceUID]." + +msgid "The [TextServerManager] singleton." +msgstr "Le singleton [TextServerManager]." + +msgid "The [ThemeDB] singleton." +msgstr "Le singleton [ThemeDB]." + msgid "The [Time] singleton." msgstr "Le singleton du [Time]." @@ -1276,6 +2132,9 @@ msgstr "Le singleton [TranslationServer]." msgid "The [WorkerThreadPool] singleton." msgstr "Le singleton [WorkerThreadPool]." +msgid "The [XRServer] singleton." +msgstr "Le singleton [XRServer]." + msgid "Top-left corner." msgstr "Coin supérieur gauche." @@ -1320,25 +2179,176 @@ msgstr "" "Alignement horizontal à gauche, généralement pour des classes dérivées de " "texte." -msgid "Horizontal center alignment, usually for text-derived classes." +msgid "Horizontal center alignment, usually for text-derived classes." +msgstr "" +"Alignement horizontal centre, généralement pour des classes dérivées de texte." + +msgid "Horizontal right alignment, usually for text-derived classes." +msgstr "" +"Alignement horizontal droite, généralement pour des classes dérivées de texte." + +msgid "Vertical top alignment, usually for text-derived classes." +msgstr "" +"Alignement vertical haut, généralement pour des classes dérivées de texte." + +msgid "Vertical center alignment, usually for text-derived classes." +msgstr "" +"Alignement vertical centre, généralement pour des classes dérivées de texte." + +msgid "Vertical bottom alignment, usually for text-derived classes." +msgstr "" +"Alignement vertical bas, généralement pour des classes dérivées de texte." + +msgid "" +"Aligns the top of the inline object (e.g. image, table) to the position of " +"the text specified by [code]INLINE_ALIGNMENT_TO_*[/code] constant." +msgstr "" +"Aligne le haut de l'objet incorporé (par ex. image, tableau) à la position du " +"texte spécifié par la constante [code]INLINE_ALIGNMENT_TO_*[/code]." + +msgid "" +"Aligns the center of the inline object (e.g. image, table) to the position of " +"the text specified by [code]INLINE_ALIGNMENT_TO_*[/code] constant." +msgstr "" +"Aligne le centre de l'objet incorporé (par ex. image, tableau) à la position " +"du texte spécifié par la constante [code]INLINE_ALIGNMENT_TO_*[/code]." + +msgid "" +"Aligns the baseline (user defined) of the inline object (e.g. image, table) " +"to the position of the text specified by [code]INLINE_ALIGNMENT_TO_*[/code] " +"constant." +msgstr "" +"Aligne la référence (définie par l'utilisateur) de l'objet incorporé (par ex. " +"image, tableau) à la position du texte spécifié par la constante " +"[code]INLINE_ALIGNMENT_TO_*[/code]." + +msgid "" +"Aligns the bottom of the inline object (e.g. image, table) to the position of " +"the text specified by [code]INLINE_ALIGNMENT_TO_*[/code] constant." +msgstr "" +"Aligne le bas de l'objet incorporé (par ex. image, tableau) à la position du " +"texte spécifié par la constante [code]INLINE_ALIGNMENT_TO_*[/code]." + +msgid "" +"Aligns the position of the inline object (e.g. image, table) specified by " +"[code]INLINE_ALIGNMENT_*_TO[/code] constant to the top of the text." +msgstr "" +"Aligne la position de l'objet incorporé (par ex. image, tableau) spécifiée " +"par la constante [code]INLINE_ALIGNMENT_*_TO[/code] au haut du texte." + +msgid "" +"Aligns the position of the inline object (e.g. image, table) specified by " +"[code]INLINE_ALIGNMENT_*_TO[/code] constant to the center of the text." +msgstr "" +"Aligne la position de l'objet incorporé (par ex. image, tableau) spécifiée " +"par la constante [code]INLINE_ALIGNMENT_*_TO[/code] au centre du texte." + +msgid "" +"Aligns the position of the inline object (e.g. image, table) specified by " +"[code]INLINE_ALIGNMENT_*_TO[/code] constant to the baseline of the text." +msgstr "" +"Aligne la position de l'objet incorporé (par ex. image, tableau) spécifiée " +"par la constante [code]INLINE_ALIGNMENT_*_TO[/code] à la base du texte." + +msgid "Aligns inline object (e.g. image, table) to the bottom of the text." +msgstr "Aligne l'objet incorporé (par ex. image, tableau) au bas du texte." + +msgid "" +"Aligns top of the inline object (e.g. image, table) to the top of the text. " +"Equivalent to [code]INLINE_ALIGNMENT_TOP_TO | INLINE_ALIGNMENT_TO_TOP[/code]." +msgstr "" +"Aligne le haut de l'objet incorporé (par ex. image, tableau) en haut du " +"texte. Équivalent à [code]INLINE_ALIGNMENT_TOP_TO | INLINE_ALIGNMENT_TO_TOP[/" +"code]." + +msgid "" +"Aligns center of the inline object (e.g. image, table) to the center of the " +"text. Equivalent to [code]INLINE_ALIGNMENT_CENTER_TO | " +"INLINE_ALIGNMENT_TO_CENTER[/code]." +msgstr "" +"Aligne le centre de l'objet incorporé (par ex. image, tableau) au centre du " +"texte. Équivalent à [code]INLINE_ALIGNMENT_CENTER_TO | " +"INLINE_ALIGNMENT_TO_CENTER[/code]." + +msgid "" +"Aligns bottom of the inline object (e.g. image, table) to the bottom of the " +"text. Equivalent to [code]INLINE_ALIGNMENT_BOTTOM_TO | " +"INLINE_ALIGNMENT_TO_BOTTOM[/code]." +msgstr "" +"Aligne le bas de l'objet incorporé (par ex. image, tableau) au bas du texte. " +"Équivalent à [code]INLINE_ALIGNMENT_BOTTOM_TO | INLINE_ALIGNMENT_TO_BOTTOM[/" +"code]." + +msgid "A bit mask for [code]INLINE_ALIGNMENT_*_TO[/code] alignment constants." +msgstr "" +"Un masque de bits pour les constantes d'alignement " +"[code]INLINE_ALIGNMENT_*_TO[/code]." + +msgid "A bit mask for [code]INLINE_ALIGNMENT_TO_*[/code] alignment constants." +msgstr "" +"Un masque de bits pour les constantes d'alignement " +"[code]INLINE_ALIGNMENT_TO_*[/code]." + +msgid "" +"Specifies that Euler angles should be in XYZ order. When composing, the order " +"is X, Y, Z. When decomposing, the order is reversed, first Z, then Y, and X " +"last." +msgstr "" +"Indique que les angles Euler doivent être dans l'ordre XYZ. Lors de la " +"composition, l'ordre est X, Y, Z. Lors de la décomposition, l'ordre est " +"inversé, Z en premier, puis Y, et enfin X." + +msgid "" +"Specifies that Euler angles should be in XZY order. When composing, the order " +"is X, Z, Y. When decomposing, the order is reversed, first Y, then Z, and X " +"last." +msgstr "" +"Indique que les angles Euler doivent être dans l'ordre XZY. Lors de la " +"composition, l'ordre est X, Z, Y. Lors de la décomposition, l'ordre est " +"inversé, Y en premier, puis Z, et enfin X." + +msgid "" +"Specifies that Euler angles should be in YXZ order. When composing, the order " +"is Y, X, Z. When decomposing, the order is reversed, first Z, then X, and Y " +"last." msgstr "" -"Alignement horizontal centre, généralement pour des classes dérivées de texte." +"Indique que les angles Euler doivent être dans l'ordre YXZ. Lors de la " +"composition, l'ordre est Y, X, Z. Lors de la décomposition, l'ordre est " +"inversé, Z en premier, puis X, et enfin Y." -msgid "Horizontal right alignment, usually for text-derived classes." +msgid "" +"Specifies that Euler angles should be in YZX order. When composing, the order " +"is Y, Z, X. When decomposing, the order is reversed, first X, then Z, and Y " +"last." msgstr "" -"Alignement horizontal droite, généralement pour des classes dérivées de texte." +"Indique que les angles d'Euler doivent être dans l'ordre YZX. Lors de la " +"composition, l'ordre est Y, Z, X. Lors de la décomposition, l'ordre est " +"inversé, X en premier, puis Z et enfin Y." -msgid "Vertical top alignment, usually for text-derived classes." +msgid "" +"Specifies that Euler angles should be in ZXY order. When composing, the order " +"is Z, X, Y. When decomposing, the order is reversed, first Y, then X, and Z " +"last." msgstr "" -"Alignement vertical haut, généralement pour des classes dérivées de texte." +"Indique que les angles Euler doivent être dans l'ordre ZXY. Lors de la " +"composition, l'ordre est Z, X, Y. Lors de la décomposition, l'ordre est " +"inversé, Y en premier, puis X, et enfin Z." -msgid "Vertical center alignment, usually for text-derived classes." +msgid "" +"Specifies that Euler angles should be in ZYX order. When composing, the order " +"is Z, Y, X. When decomposing, the order is reversed, first X, then Y, and Z " +"last." msgstr "" -"Alignement vertical centre, généralement pour des classes dérivées de texte." +"Indique que les angles Euler doivent être dans l'ordre ZYX. Lors de la " +"composition, l'ordre est Z, Y, X. Lors de la décomposition, l'ordre est " +"inversé, X en premier, puis Y, et enfin Z." -msgid "Vertical bottom alignment, usually for text-derived classes." +msgid "" +"Enum value which doesn't correspond to any key. This is used to initialize " +"[enum Key] properties with a generic state." msgstr "" -"Alignement vertical bas, généralement pour des classes dérivées de texte." +"Valeur d'énumération qui ne correspond à aucune touche. Utilisé pour " +"initialiser les propriétés [enum Key] à un état générique." msgid "Escape key." msgstr "Touche Échap." @@ -1346,6 +2356,9 @@ msgstr "Touche Échap." msgid "Tab key." msgstr "Touche de tabulation." +msgid "Shift + Tab key." +msgstr "Touche Maj + Tab." + msgid "Backspace key." msgstr "Touche de retour arrière." @@ -1490,6 +2503,61 @@ msgstr "Touche F23." msgid "F24 key." msgstr "Touche F24." +msgid "F25 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F25. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F26 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F26. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F27 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F27. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F28 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F28. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F29 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F29. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F30 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F30. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F31 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F31. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F32 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F32. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F33 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F33. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F34 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F34. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + +msgid "F35 key. Only supported on macOS and Linux due to a Windows limitation." +msgstr "" +"Touche F35. Supporté uniquement sur macOS et Linux à cause d'une limitation " +"de Windows." + msgid "Multiply (*) key on the numeric keypad." msgstr "Touche de multiplication (*) sur le pavé numérique." @@ -1538,24 +2606,15 @@ msgstr "Chiffre 9 sur le pavé numérique." msgid "Context menu key." msgstr "Touche de menu contextuel." +msgid "Hyper key. (On Linux/X11 only)." +msgstr "Touche Hyper. (Seulement sur Linux/X11)." + msgid "Help key." msgstr "Touche d’aide." -msgid "" -"Media back key. Not to be confused with the Back button on an Android device." -msgstr "" -"Touche de retour média. Ne pas confondre avec le bouton de retour d'un " -"appareil Android." - -msgid "Media forward key." -msgstr "Touche d'avance média." - msgid "Media stop key." msgstr "Clé d'arrêt de média." -msgid "Media refresh key." -msgstr "Touche de rechargement média." - msgid "Volume down key." msgstr "Touche de réduction du volume." @@ -1652,71 +2711,35 @@ msgstr "Touché inconnue." msgid "Space key." msgstr "Touche espace." -msgid "! key." -msgstr "Touche !." - -msgid "\" key." -msgstr "Touche \"." - -msgid "# key." -msgstr "Touche #." - -msgid "$ key." -msgstr "Touche $." +msgid "Number 0 key." +msgstr "Touche nombre 0." -msgid "% key." -msgstr "Touche %." +msgid "Number 1 key." +msgstr "Touche nombre 1." -msgid "& key." -msgstr "Touche &." +msgid "Number 2 key." +msgstr "Touche nombre 2." -msgid "' key." -msgstr "Touche '." +msgid "Number 3 key." +msgstr "Touche nombre 3." -msgid "( key." -msgstr "Touche (." +msgid "Number 4 key." +msgstr "Touche nombre 4." -msgid ") key." -msgstr "Touche )." +msgid "Number 5 key." +msgstr "Touche nombre 5." -msgid "* key." -msgstr "Touche *." +msgid "Number 6 key." +msgstr "Touche nombre 6." -msgid "+ key." -msgstr "Touche +." +msgid "Number 7 key." +msgstr "Touche nombre 7." -msgid ", key." -msgstr "Touche ,." +msgid "Number 8 key." +msgstr "Touche nombre 8." -msgid "- key." -msgstr "Touche -." - -msgid ". key." -msgstr "Touche \".\"." - -msgid "/ key." -msgstr "Touche /." - -msgid ": key." -msgstr "Touche :." - -msgid "; key." -msgstr "Touche ;." - -msgid "< key." -msgstr "Touche <." - -msgid "= key." -msgstr "Touche =." - -msgid "> key." -msgstr "Touche >." - -msgid "? key." -msgstr "Touche ?." - -msgid "@ key." -msgstr "Touche @." +msgid "Number 9 key." +msgstr "Touche nombre 9." msgid "A key." msgstr "Touche A." @@ -1796,42 +2819,6 @@ msgstr "Touche Y." msgid "Z key." msgstr "Touche Z." -msgid "[ key." -msgstr "Touche [." - -msgid "\\ key." -msgstr "Touche \\." - -msgid "] key." -msgstr "Touche ]." - -msgid "^ key." -msgstr "Touche ^." - -msgid "_ key." -msgstr "Touche _." - -msgid "` key." -msgstr "Touche `." - -msgid "{ key." -msgstr "Touche {." - -msgid "| key." -msgstr "Touche |." - -msgid "} key." -msgstr "Touche }." - -msgid "~ key." -msgstr "Touche ~." - -msgid "¥ key." -msgstr "Touche ¥." - -msgid "§ key." -msgstr "Touche §." - msgid "Key Code mask." msgstr "Masque de code clé." @@ -1841,33 +2828,170 @@ msgstr "Masque de touche de modification." msgid "Shift key mask." msgstr "Masque de la touche Shift." +msgid "Alt or Option (on macOS) key mask." +msgstr "Masque de touche Alt ou Option (sur macOS)." + msgid "Keypad key mask." msgstr "Masque des touches du clavier." msgid "Group Switch key mask." msgstr "Masque de l'interrupteur groupe." +msgid "" +"Used for keys which only appear once, or when a comparison doesn't need to " +"differentiate the [code]LEFT[/code] and [code]RIGHT[/code] versions.\n" +"For example, when using [method InputEvent.is_match], an event which has " +"[constant KEY_LOCATION_UNSPECIFIED] will match any [enum KeyLocation] on the " +"passed event." +msgstr "" +"Utilisé pour les touches qui n'apparaissent qu'une fois, ou lorsqu'une " +"comparaison n'a pas besoin de différencier les versions [code]LEFT[/code] et " +"[code]RIGHT[/code].\n" +"Par exemple, lors de l'utilisation de [method InputEvent.is_match], un " +"événement qui a [constant KEY_LOCATION_UNSPECIFIED] correspond à toute [enum " +"KeyLocation] sur l'événement passé." + +msgid "A key which is to the left of its twin." +msgstr "Une touche qui est à gauche de son jumeau." + +msgid "A key which is to the right of its twin." +msgstr "Une touche qui est à droite de son jumeau." + +msgid "" +"Enum value which doesn't correspond to any mouse button. This is used to " +"initialize [enum MouseButton] properties with a generic state." +msgstr "" +"Valeur d'énumération qui ne correspond à aucun bouton de souris. Ceci est " +"utilisé pour initialiser les propriétés [enum MouseButton] à un état " +"générique." + +msgid "Primary mouse button, usually assigned to the left button." +msgstr "Bouton de souris principal, habituellement assigné au bouton gauche." + +msgid "Secondary mouse button, usually assigned to the right button." +msgstr "Bouton de souris secondaire, généralement assigné au bouton droit." + msgid "Middle mouse button." msgstr "Bouton du milieu de la souris." +msgid "Mouse wheel scrolling down." +msgstr "Molette de la souris vers le bas." + msgid "Mouse wheel left button (only present on some mice)." msgstr "" -"Bouton gauche de la molette de la souris (présent uniquement sur certaines " -"souris)." +"Bouton gauche de la molette souris (présent uniquement sur certaines souris)." msgid "Mouse wheel right button (only present on some mice)." msgstr "" -"Bouton gauche de la molette de la souris (présent uniquement sur certaines " -"souris)." +"Bouton gauche de la molette souris (présent uniquement sur certaines souris)." + +msgid "" +"Extra mouse button 1. This is sometimes present, usually to the sides of the " +"mouse." +msgstr "" +"Bouton de souris supplémentaire 1. Présent parfois sur certaines souris, en " +"général sur les côtés." + +msgid "" +"Extra mouse button 2. This is sometimes present, usually to the sides of the " +"mouse." +msgstr "" +"Bouton de souris supplémentaire 2. Présent parfois sur certaines souris, en " +"général sur les côtés." + +msgid "Primary mouse button mask, usually for the left button." +msgstr "" +"Masque de bouton de souris principal, habituellement pour le bouton gauche." msgid "Middle mouse button mask." msgstr "Masque du bouton central de la souris." msgid "Extra mouse button 1 mask." -msgstr "Masque du bouton 1 de la souris supplémentaire." +msgstr "Masque du bouton supplémentaire de la souris 1." msgid "Extra mouse button 2 mask." -msgstr "Masque du bouton de souris supplémentaire 2." +msgstr "Masque du bouton supplémentaire de la souris 2." + +msgid "An invalid game controller button." +msgstr "Un bouton de manette invalide." + +msgid "" +"Game controller SDL button A. Corresponds to the bottom action button: Sony " +"Cross, Xbox A, Nintendo B." +msgstr "" +"Bouton SDL A de contrôleur de jeu. Correspond au bouton d'action inférieur : " +"Sony Cross, Xbox A, Nintendo B." + +msgid "" +"Game controller SDL button B. Corresponds to the right action button: Sony " +"Circle, Xbox B, Nintendo A." +msgstr "" +"Bouton SDL B de contrôleur de jeu. Correspond au bouton d'action droit : Sony " +"Circle, Xbox B, Nintendo A." + +msgid "" +"Game controller SDL button X. Corresponds to the left action button: Sony " +"Square, Xbox X, Nintendo Y." +msgstr "" +"Bouton SDL X de manette. Correspond au bouton d'action gauche : Sony Square, " +"Xbox X, Nintendo Y." + +msgid "" +"Game controller SDL button Y. Corresponds to the top action button: Sony " +"Triangle, Xbox Y, Nintendo X." +msgstr "" +"Bouton SDL Y de manette. Correspond au bouton d'action haut : Sony Triangle, " +"Xbox Y, Nintendo X." + +msgid "" +"Game controller SDL back button. Corresponds to the Sony Select, Xbox Back, " +"Nintendo - button." +msgstr "" +"Bouton retour de manette SDL. Correspond au bouton Sony Select, Xbox Back, " +"Nintendo -." + +msgid "" +"Game controller SDL guide button. Corresponds to the Sony PS, Xbox Home " +"button." +msgstr "Bouton guide de manette SDL. Correspond au bouton Sony PS, Xbox Home." + +msgid "" +"Game controller SDL start button. Corresponds to the Sony Options, Xbox Menu, " +"Nintendo + button." +msgstr "" +"Bouton start de manette SDL. Correspond au bouton Sony Options, Xbox Menu, " +"Nintendo +." + +msgid "" +"Game controller SDL left stick button. Corresponds to the Sony L3, Xbox L/LS " +"button." +msgstr "" +"Bouton stick gauche de manette SDL. Correspond au bouton Sony L3, Xbox L/LS." + +msgid "" +"Game controller SDL right stick button. Corresponds to the Sony R3, Xbox R/RS " +"button." +msgstr "" +"Bouton stick droit de manette SDL. Correspond au bouton Sony R3, Xbox R/RS." + +msgid "" +"Game controller SDL left shoulder button. Corresponds to the Sony L1, Xbox LB " +"button." +msgstr "" +"Bouton d'épaule gauche de manette SDL. Correspond au bouton Sony L1, Xbox LB." + +msgid "" +"Game controller SDL right shoulder button. Corresponds to the Sony R1, Xbox " +"RB button." +msgstr "" +"Bouton d'épaule droit de manette SDL. Correspond au bouton Sony R1, Xbox RB." + +msgid "" +"Game controller SDL miscellaneous button. Corresponds to Xbox share button, " +"PS5 microphone button, Nintendo Switch capture button." +msgstr "" +"Bouton divers de manette SDL. Correspond au bouton Xbox share, PS5 " +"microphone, Nintendo Switch capture." msgid "" "The maximum number of game controller buttons supported by the engine. The " @@ -1882,6 +3006,87 @@ msgstr "" "- [b]Linux : [/b]Jusqu'à 80 boutons.\n" "- [b]Window et macOS : [/b]Jusqu'à 128 boutons." +msgid "" +"The maximum number of game controller axes: OpenVR supports up to 5 Joysticks " +"making a total of 10 axes." +msgstr "" +"Le nombre maximum d'axes de manette : OpenVR supporte jusqu'à 5 joysticks " +"pour un total de 10 axes." + +msgid "" +"Does not correspond to any MIDI message. This is the default value of [member " +"InputEventMIDI.message]." +msgstr "" +"Ne correspond à aucun message MIDI. C'est la valeur par défaut de [member " +"InputEventMIDI.message]." + +msgid "" +"MIDI message sent to indicate a change in pressure while a note is being " +"pressed down, also called aftertouch." +msgstr "" +"Message MIDI envoyé pour indiquer un changement de pression pendant qu'une " +"note est pressée, également appelée aftertouch." + +msgid "" +"MIDI message sent when the MIDI device changes its current instrument (also " +"called [i]program[/i] or [i]preset[/i])." +msgstr "" +"Message MIDI envoyé lorsque l'appareil MIDI modifie son instrument actuel " +"(également appelé [i]program[/i] ou [i]preset[/i])." + +msgid "" +"MIDI message sent to indicate a change in pressure for the whole channel. " +"Some MIDI devices may send this instead of [constant MIDI_MESSAGE_AFTERTOUCH]." +msgstr "" +"Message MIDI envoyé pour indiquer un changement de pression pour l'ensemble " +"du canal. Certains périphériques MIDI peuvent envoyer ceci au lieu de " +"[constant MIDI_MESSAGE_AFTERTOUCH]." + +msgid "" +"MIDI system exclusive (SysEx) message. This type of message is not " +"standardized and it's highly dependent on the MIDI device sending it.\n" +"[b]Note:[/b] Getting this message's data from [InputEventMIDI] is not " +"implemented." +msgstr "" +"Message exclusif au système MIDI (SysEX). Ce type de message n'est pas " +"standardisé et il est fortement dépendant de l'appareil MIDI qui l'envoie.\n" +"[b]Note :[/b] Obtenir les données de ce message depuis [InputEventMIDI] n'est " +"pas implémenté." + +msgid "" +"MIDI message sent to jump onto a new position in the current sequence or " +"song.\n" +"[b]Note:[/b] Getting this message's data from [InputEventMIDI] is not " +"implemented." +msgstr "" +"Message MIDI envoyé pour sauter vers une nouvelle position dans la séquence " +"ou la chanson courante.\n" +"[b]Note :[/b] Obtenir les données de ce message depuis [InputEventMIDI] n'est " +"pas implémenté." + +msgid "" +"MIDI message sent to request a tuning calibration. Used on analog " +"synthesizers. Most modern MIDI devices do not need this message." +msgstr "" +"Message MIDI envoyé pour demander un calibrage d'accord. Utilisé sur les " +"synthétiseurs analogiques. La plupart des appareils MIDI modernes n'ont pas " +"besoin de ce message." + +msgid "" +"MIDI message sent 24 times after [constant MIDI_MESSAGE_QUARTER_FRAME], to " +"keep connected MIDI devices synchronized." +msgstr "" +"Message MIDI envoyé 24 fois après [constant MIDI_MESSAGE_QUARTER_FRAME], pour " +"garder les périphériques MIDI connectés synchronisés." + +msgid "" +"MIDI message sent to reset a MIDI device to its default state, as if it was " +"just turned on. It should not be sent when the MIDI device is being turned on." +msgstr "" +"Message MIDI envoyé pour réinitialiser un périphérique MIDI à son état par " +"défaut, comme s'il venait de s'allumer. Il ne devrait pas être envoyé lorsque " +"l'appareil MIDI est activé." + msgid "Generic error." msgstr "Erreur générique." @@ -2017,6 +3222,118 @@ msgstr "Erreur d'occupation." msgid "Skip error." msgstr "Ignorer l'erreur." +msgid "" +"Help error. Used internally when passing [code]--version[/code] or [code]--" +"help[/code] as executable options." +msgstr "" +"Erreur d'aide. Utilisé de manière interne lors du passage de [code]--version[/" +"code] ou [code]--help[/code] comme options exécutables." + +msgid "" +"Bug error, caused by an implementation issue in the method.\n" +"[b]Note:[/b] If a built-in method returns this code, please open an issue on " +"[url=https://github.com/godotengine/godot/issues]the GitHub Issue Tracker[/" +"url]." +msgstr "" +"Erreur de bogues, causée par un problème d'implémentation dans la méthode.\n" +"[b]Note :[/b] Si une méthode intégrée retourne ce code, veuillez ouvrir un " +"sujet sur [url=https://github.com/godotengine/godot/issues]l'Issue Tracker de " +"GitHub[/url]." + +msgid "" +"Hints that a vector property should allow its components to be linked. For " +"example, this allows [member Vector2.x] and [member Vector2.y] to be edited " +"together." +msgstr "" +"Indique qu'une propriété vectorielle devrait permettre à ses composants " +"d'êtres liés. Par exemple, cela permet [membre Vector2.x] et [membre Vector2." +"y] d'être édités ensemble." + +msgid "" +"Hints that an [int] property is a bitmask with named bit flags.\n" +"The hint string is a comma separated list of names such as [code]\"Bit0,Bit1," +"Bit2,Bit3\"[/code]. Whitespaces are [b]not[/b] removed from either end of a " +"name. The first name in the list has value 1, the next 2, then 4, 8, 16 and " +"so on. Explicit values can also be specified by appending [code]:integer[/" +"code] to the name, e.g. [code]\"A:4,B:8,C:16\"[/code]. You can also combine " +"several flags ([code]\"A:4,B:8,AB:12,C:16\"[/code]).\n" +"[b]Note:[/b] A flag value must be at least [code]1[/code] and at most [code]2 " +"** 32 - 1[/code].\n" +"[b]Note:[/b] Unlike [constant PROPERTY_HINT_ENUM], the previous explicit " +"value is not taken into account. For the hint [code]\"A:16,B,C\"[/code], A is " +"16, B is 2, C is 4." +msgstr "" +"Indique qu'une propriété [int] est un maque de bits avec des drapeaux bits " +"nommés.\n" +"La chaîne d'indice est une liste de noms séparée par des virgules tels que " +"[code]\"Bit0,Bit1,Bit2,Bit3\"[/code]. Les espaces blancs [b]ne sont pas [/b] " +"retirés de chaque extrémité d'un nom. Le premier nom de la liste a la valeur " +"1, le 2 suivant, puis 4, 8, 16 et ainsi de suite. Des valeurs explicites " +"peuvent également être spécifiées en ajoutant [code]:integer[/code] au nom, " +"par exemple [code]\"A:4,B:8,C:16\"[/code]. Vous pouvez également combiner " +"plusieurs drapeaux ([code]\"A:4,B:8,AB:12,C:16\"[/code]).\n" +"[b]Note :[/b] Une valeur de drapeau doit être au moins [code]1[/code] et au " +"plus [code]2 ** 32 - 1[/code].\n" +"[b]Note :[/b] Contrairement à [constant PROPERTY_HINT_ENUM], la valeur " +"explicite précédente n'est pas prise en compte. Pour l'indice [code]\"A:16,B," +"C\"[/code], A est 16, B est 2, C est 4." + +msgid "Hints that a [String] property is an [Expression]." +msgstr "Indique qu'une propriété [String] est une [Expression]." + +msgid "" +"Hints that the property's value is an object encoded as object ID, with its " +"type specified in the hint string. Used by the debugger." +msgstr "" +"Indique que la valeur de la propriété est un objet encodé comme un ID " +"d'objet, avec son type spécifié dans la chaîne indice. Utilisé par le " +"débogueur." + +msgid "Hints that an object is too big to be sent via the debugger." +msgstr "Indique d'un objet est trop gros pour être envoyé via le débugueur." + +msgid "" +"Hints that the hint string specifies valid node types for property of type " +"[NodePath]." +msgstr "" +"Indique que la chaine-indice spécifie des types de nœud valides pour la " +"propriété de type [NodePath]." + +msgid "" +"Hints that a property is an [Array] with the stored type specified in the " +"hint string." +msgstr "" +"Indique qu'une propriété est un [Array] avec le type spécifié dans la chaine-" +"indice." + +msgid "" +"Hints that a dictionary property is string translation map. Dictionary keys " +"are locale codes and, values are translated strings." +msgstr "" +"Indique qu'une propriété dictionnaire est une carte de traduction de chaîne " +"de caractères. Les clés du dictionnaire sont des code de langue et les " +"valeurs les chaînes traduites." + +msgid "" +"Hints that a quaternion property should disable the temporary euler editor." +msgstr "" +"Indique qu'une propriété quaternion devrait désactiver l'éditeur temporaire " +"d'angles d'Euler." + +msgid "" +"Hints that a string property is a password, and every character is replaced " +"with the secret character." +msgstr "" +"Indique qu'une propriété de chaine de caractères est un mot de passe, et que " +"chaque caractère est remplacé par le caractère secret." + +msgid "" +"The property is not stored, and does not display in the editor. This is the " +"default for non-exported properties." +msgstr "" +"La propriété n'est pas enregistrée, et ne s'affiche pas dans l'éditeur. C'est " +"le comportement par défaut des propriétés non-exportées." + msgid "Used to group properties together in the editor. See [EditorInspector]." msgstr "" "Utilisé pour rassembler des propriétés ensemble dans l'éditeur. Voir " @@ -2025,6 +3342,13 @@ msgstr "" msgid "Used to categorize properties together in the editor." msgstr "Utilisé pour classer des propriétés ensemble dans l'éditeur." +msgid "" +"The property is a bitfield, i.e. it contains multiple flags represented as " +"bits." +msgstr "" +"La propriété est un champ de bits, c'est-à-dire elle contient plusieurs " +"drapeaux représentés par des bits." + msgid "The property does not save its state in [PackedScene]." msgstr "La propriété ne sauvegarde pas son état dans [PackedScene]." @@ -2032,11 +3356,74 @@ msgid "Editing the property prompts the user for restarting the editor." msgstr "Éditer la propriété incite à l'utilisateur de redémarrer l'éditeur." msgid "" -"The property is a script variable which should be serialized and saved in the " -"scene file." +"The property value of type [Object] will be stored even if its value is " +"[code]null[/code]." +msgstr "" +"La valeur de la propriété de type [Object] sera enregistrée même si sa valeur " +"est [code]null[/code]." + +msgid "If this property is modified, all inspector fields will be refreshed." +msgstr "" +"Si cette propriété est modifiée, tous les champs de l'inspecteur seront " +"rafraichis." + +msgid "" +"If property has [code]nil[/code] as default value, its type will be [Variant]." +msgstr "" +"Si la propriété a [code]nil[/code] comme valeur par défaut, son type sera " +"[Variant]." + +msgid "" +"When duplicating a resource with [method Resource.duplicate], and this flag " +"is set on a property of that resource, the property should always be " +"duplicated, regardless of the [code]subresources[/code] bool parameter." +msgstr "" +"Lorsque l'on duplique une ressource avec [method Resource.duplicate], et ce " +"drapeau est placé sur une propriété de cette ressource, la propriété doit " +"toujours être dupliquée, peu importe le paramètre booléen [code]subresources[/" +"code]." + +msgid "" +"When duplicating a resource with [method Resource.duplicate], and this flag " +"is set on a property of that resource, the property should never be " +"duplicated, regardless of the [code]subresources[/code] bool parameter." +msgstr "" +"Lorsque l'on duplique une ressource avec [method Resource.duplicate], et ce " +"drapeau est placé sur une propriété de cette ressource, la propriété ne doit " +"jamais être dupliquée, peu importe le paramètre booléen [code]subresources[/" +"code]." + +msgid "" +"The [NodePath] property will always be relative to the scene's root. Mostly " +"useful for local resources." +msgstr "" +"La propriété [NodePath] sera toujours relative à la racine de la scène. " +"Généralement utile pour les ressources locales." + +msgid "" +"Use when a resource is created on the fly, i.e. the getter will always return " +"a different instance. [ResourceSaver] needs this information to properly save " +"such resources." msgstr "" -"La propriété est une variable appartenant à un script, qui devrait être " -"sérialisé et sauvegardé dans le fichier de la scène." +"Utiliser quand une ressource est créée à la volée, c'est-à-dire que le getter " +"retournera toujours une instance différente. [ResourceSaver] a besoin de " +"cette information pour sauvegarder correctement ces ressources." + +msgid "" +"When this property is a [Resource] and base object is a [Node], a resource " +"instance will be automatically created whenever the node is created in the " +"editor." +msgstr "" +"Lorsque cette propriété est une [Resource] et l'objet de base est un [Node], " +"une instance de la ressource sera automatiquement créée lorsque le nœud est " +"créé dans l'éditeur." + +msgid "" +"The property is considered a basic setting and will appear even when advanced " +"mode is disabled. Used for project settings." +msgstr "" +"La propriété est considérée comme un réglage de base et apparaîtra même " +"lorsque le mode avancé est désactivé. Utilisé pour les réglages de projet." msgid "Flag for a normal method." msgstr "Indicateur pour une méthode normale." @@ -2050,6 +3437,16 @@ msgstr "Indicateur pour une méthode constante." msgid "Flag for a virtual method." msgstr "Indicateur pour une méthode virtuelle." +msgid "Flag for a method with a variable number of arguments." +msgstr "Drapeau pour une méthode avec un nombre variable d'arguments." + +msgid "" +"Used internally. Allows to not dump core virtual methods (such as [method " +"Object._notification]) to the JSON API." +msgstr "" +"Utilisé en interne. Permet de ne pas décharger des méthodes virtuelles coeur " +"(telles que la méthode [Object_notification]) à l'API JSON." + msgid "Variable is [code]null[/code]." msgstr "La variable est [code]null[/code]." @@ -2170,6 +3567,9 @@ msgstr "L'opérateur d'addition unaire ([code]+[/code])." msgid "Remainder/modulo operator ([code]%[/code])." msgstr "Reste / opérateur modulo ([code]%[/code])." +msgid "Power operator ([code]**[/code])." +msgstr "Opérateur de puissance ([code]**[/code])." + msgid "Left shift operator ([code]<<[/code])." msgstr "Operateur de décalage de bits vers la gauche ([code]<<[/code])." @@ -2215,6 +3615,53 @@ msgstr "Mathématiques des vecteurs" msgid "Advanced vector math" msgstr "Mathématiques avancées des vecteurs" +msgid "" +"Returns [code]true[/code] if this bounding box [i]completely[/i] encloses the " +"[param with] box. The edges of both boxes are included.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var a = AABB(Vector3(0, 0, 0), Vector3(4, 4, 4))\n" +"var b = AABB(Vector3(1, 1, 1), Vector3(3, 3, 3))\n" +"var c = AABB(Vector3(2, 2, 2), Vector3(8, 8, 8))\n" +"\n" +"print(a.encloses(a)) # Prints true\n" +"print(a.encloses(b)) # Prints true\n" +"print(a.encloses(c)) # Prints false\n" +"[/gdscript]\n" +"[csharp]\n" +"var a = new Aabb(new Vector3(0, 0, 0), new Vector3(4, 4, 4));\n" +"var b = new Aabb(new Vector3(1, 1, 1), new Vector3(3, 3, 3));\n" +"var c = new Aabb(new Vector3(2, 2, 2), new Vector3(8, 8, 8));\n" +"\n" +"GD.Print(a.Encloses(a)); // Prints True\n" +"GD.Print(a.Encloses(b)); // Prints True\n" +"GD.Print(a.Encloses(c)); // Prints False\n" +"[/csharp]\n" +"[/codeblocks]" +msgstr "" +"Renvoie [code]true[/code] si cette boîte englobante encadre [i]complètement[/" +"i] la boîte [param with]. Les bords des deux boîtes sont inclus.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var a = AABB(Vector3(0, 0, 0), Vector3(4, 4, 4))\n" +"var b = AABB(Vector3(1, 1, 1), Vector3(3, 3, 3))\n" +"c = AABB(Vector3(2, 2, 2), Vector3(8, 8, 8))\n" +"\n" +"print(a.encloses(a)) # Affiche true\n" +"print(a.encloses(b)) # Affiche true\n" +"print(a.encloses(c)) # Affiche false\n" +"[/gdscript]\n" +"[Sharp]\n" +"var a = new Aabb(new Vector3(0, 0, 0), new Vector3(4, 4, 4));\n" +"var b = new Aabb(nouveau Vector3(1, 1, 1), new Vector3(3, 3, 3));\n" +"c = new Aabb(nouveau Vector3(2, 2, 2), new Vector3(8, 8, 8));\n" +"\n" +"GD.Print(a.Encloses(a)); // Affiche True\n" +"GD.Print(a.Encloses(b)); // Affiche True\n" +"GD.Print(a.Encloses(c)); // Affiche False\n" +"[/csharp]\n" +"[/codeblocks]" + msgid "" "Returns the label used for built-in text.\n" "[b]Warning:[/b] This is a required internal node, removing and freeing it may " @@ -2583,6 +4030,16 @@ msgstr "" "Ne met à jour l'animation. Utilisez [method advance] pour mettre à jour " "l'animation manuellement." +msgid "" +"Batch method calls during the animation process, then do the calls after " +"events are processed. This avoids bugs involving deleting nodes or modifying " +"the AnimationPlayer while playing." +msgstr "" +"Regroupe les appels de méthodes durant le processus d'animation, puis " +"effectue les appels après que les évènements ont été traités. Cela évite des " +"bugs impliquant la suppression de nœuds ou la modification de " +"l'AnimationPlayer durant la lecture." + msgid "Make method calls immediately when reached in the animation." msgstr "" "Appelle la méthode aussitôt qu'elle est précisée lors de la lecture de " @@ -2594,9 +4051,6 @@ msgstr "Utiliser les AnimationTree" msgid "Gets the name of an input by index." msgstr "Obtient le nom d'un entrée par son index." -msgid "Returns whether the given path is filtered." -msgstr "Retourne quand un chemin donné est filtré." - msgid "Removes an input, call this only when inactive." msgstr "Supprime une entrée, à n'appeler que si le nœud est inactif." @@ -2847,12 +4301,42 @@ msgstr "" "Attend que la lecture de l'état actuelle se termine, puis passe au début de " "la prochaine animation de l'état." +msgid "Don't use this transition." +msgstr "N'utilisez pas cette transition." + msgid "AnimationTree" msgstr "AnimationTree" msgid "Clears all queued, unplayed animations." msgstr "Efface toutes les animations en file d’attente et non joués." +msgid "Use [member AnimationMixer.callback_mode_process] instead." +msgstr "Utilisez [member AnimationMixer.callback_mode_process] à la place." + +msgid "Use [member AnimationMixer.root_node] instead." +msgstr "Utilisez [member AnimationMixer.root_node] à la place." + +msgid "" +"Seeks the animation to the [param seconds] point in time (in seconds). If " +"[param update] is [code]true[/code], the animation updates too, otherwise it " +"updates at process time. Events between the current frame and [param seconds] " +"are skipped.\n" +"If [param update_only] is [code]true[/code], the method / audio / animation " +"playback tracks will not be processed.\n" +"[b]Note:[/b] Seeking to the end of the animation doesn't emit [signal " +"AnimationMixer.animation_finished]. If you want to skip animation and emit " +"the signal, use [method AnimationMixer.advance]." +msgstr "" +"Avance la lecture de l'animation à la position [param seconds] dans le temps " +"(en secondes). Si [param update] est [code]true[/code], l'animation se mettra " +"également à jour, sinon elle le sera au moment du traitement. Les événements " +"entre la trame actuelle et la position [param seconds] sont ignorés.\n" +"Si [param update_only] est [code]true[/code], les pistes de lecture de " +"méthode / audio / animation ne seront pas traitées.\n" +"[b]Note :[/b] Aller à la fin de l'animation n'émet pas le signal [signal " +"AnimationMixer.animation_finished]. Si vous souhaitez ignorer l'animation et " +"émettre le signal, utilisez plutôt [method AnimationMixer.advance]." + msgid "The position (in seconds) of the currently playing animation." msgstr "La position (en secondes) de l'animation actuellement jouée." @@ -2863,6 +4347,19 @@ msgstr "" "Le moment par défaut où les animations sont mélangées. L'intervalle va de 0 à " "4096 avec une précision de 0,01." +msgid "See [constant AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_PHYSICS]." +msgstr "Voir [constant AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_PHYSICS]." + +msgid "See [constant AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_IDLE]." +msgstr "Voir [constant AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_IDLE]." + +msgid "See [constant AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_MANUAL]." +msgstr "Voir [constant AnimationMixer.ANIMATION_CALLBACK_MODE_PROCESS_MANUAL]." + +msgid "See [constant AnimationMixer.ANIMATION_CALLBACK_MODE_METHOD_IMMEDIATE]." +msgstr "" +"Voir [constant AnimationMixer.ANIMATION_CALLBACK_MODE_METHOD_IMMEDIATE]." + msgid "The path to the [AnimationPlayer] used for animating." msgstr "Le chemin vers le [AnimationPlayer] utilisé pour l'animation." @@ -2938,6 +4435,29 @@ msgstr "" msgid "This area does not affect gravity/damping." msgstr "Cette aire n'influe pas sur la gravité/amortissement." +msgid "" +"This area adds its gravity/damping values to whatever has been calculated so " +"far (in [member priority] order), ignoring any lower priority areas." +msgstr "" +"Cette zone ajoute sa valeur de gravité/amortissement à tout ce qui a été " +"calculé pour le moment (dans l'ordre de [member priority]), en ignorant les " +"zones de plus basse priorité." + +msgid "" +"This area replaces any gravity/damping, even the defaults, ignoring any lower " +"priority areas." +msgstr "" +"Cette zone remplace n'importe quelle gravité/amortissement, même les valeurs " +"par défaut, en ignorant les zones de plus basse priorité." + +msgid "" +"This area replaces any gravity/damping calculated so far (in [member " +"priority] order), but keeps calculating the rest of the areas." +msgstr "" +"Cette zone remplace n'importe quelle gravité/amortissement calculé pour le " +"moment (dans l'ordre de [member priority]), mais continue de calculer le " +"reste des zones." + msgid "" "The rate at which objects stop spinning in this area. Represents the angular " "velocity lost per second.\n" @@ -3002,9 +4522,6 @@ msgstr "Construit un tableau à partir d'un [PackedVector2Array]." msgid "Constructs an array from a [PackedVector3Array]." msgstr "Construit an tableau à partir d'un [PackedVector3Array]." -msgid "Returns the number of times an element is in the array." -msgstr "Retourne le nombre de fois qu'un élément apparait dans le tableau." - msgid "" "Appends an element at the end of the array. See also [method push_front]." msgstr "Ajout un élément à la fin du tableau. Voir aussi [method push_front]." @@ -3015,6 +4532,13 @@ msgstr "" "Le type [Mesh] qui fournit un utilitaire pour la construction d'une nouvelle " "surface à partir de tableaux." +msgid "" +"Adds name for a blend shape that will be added with [method " +"add_surface_from_arrays]. Must be called before surface is added." +msgstr "" +"Ajoute un nom au blend shape qui sera ajouté avec [method " +"add_surface_from_arrays]. Doit être appelé avant que la surface soit ajoutée." + msgid "Removes all blend shapes from this [ArrayMesh]." msgstr "Retire toutes les formes de mélange de ce [ArrayMesh]." @@ -3154,6 +4678,9 @@ msgid "" "Removes the point associated with the given [param id] from the points pool." msgstr "Retire le point associé à l'[param id] donné du pool des points." +msgid "Use [member region] instead." +msgstr "Utilisez [member region] à la place." + msgid "Stores information about the audio buses." msgstr "Stocke de l'information sur les bus audio." @@ -3204,6 +4731,13 @@ msgstr "" msgid "Adds a chorus audio effect." msgstr "Ajoute un effet audio de chœur." +msgid "" +"Adds a chorus audio effect. The effect applies a filter with voices to " +"duplicate the audio source and manipulate it through the filter." +msgstr "" +"Ajoute un effet audio de chœur. Cet effet applique un filtre avec des voix " +"pour dupliquer la source audio et la manipuler à travers le filtre." + msgid "The effect's raw signal." msgstr "Le signal brut de l’effet." @@ -3473,6 +5007,9 @@ msgstr "" "Réduit toutes les fréquences au-dessus de [member AudioEffectFilter." "cutoff_hz]." +msgid "Use [AudioEffectHardLimiter] instead." +msgstr "Utilisez [AudioEffectHardLimiter] à la place." + msgid "" "A limiter is similar to a compressor, but it's less flexible and designed to " "disallow sound going over a given dB threshold. Adding one in the Master bus " @@ -3744,6 +5281,9 @@ msgstr "Godot 3.2 aura ces nouvelles fonctionnalités audio" msgid "Clears the audio sample data buffer." msgstr "Efface la mémoire tampon des échantillons audio." +msgid "Disable auto-advance (default)." +msgstr "Désactive l'avance automatique (par défaut)." + msgid "Audio Mic Record Demo" msgstr "Démo d'enregistrement du microphone" @@ -3874,27 +5414,10 @@ msgstr "" msgid "Stores audio data loaded from WAV files." msgstr "Enregistre les données audio depuis les fichiers WAV." -msgid "" -"Contains the audio data in bytes.\n" -"[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." - msgid "Audio format. See [enum Format] constants for values." msgstr "" "Le format audio. Voir les constantes [enum Format] pour les valeurs possibles." -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." - msgid "" "The sample rate for mixing this audio. Higher values require more storage " "space, but result in better quality.\n" @@ -3925,15 +5448,6 @@ msgstr "" msgid "If [code]true[/code], audio is stereo." msgstr "Si [code]true[/code], l’audio est stéréo." -msgid "8-bit audio codec." -msgstr "Codec audio 8 bits." - -msgid "16-bit audio codec." -msgstr "Codec audio 16 bits." - -msgid "Audio is compressed using IMA ADPCM." -msgstr "L'audio est compressé avec IMA ADPCM." - msgid "Audio does not loop." msgstr "L'audio ne boucle pas." @@ -3993,6 +5507,22 @@ msgstr "" "Retourne [code]true[/code] si la souris est entrée dans le bouton mais ne l'a " "pas encore quitté." +msgid "" +"Changes the [member button_pressed] state of the button, without emitting " +"[signal toggled]. Use when you just want to change the state of the button " +"without sending the pressed event (e.g. when initializing scene). Only works " +"if [member toggle_mode] is [code]true[/code].\n" +"[b]Note:[/b] This method doesn't unpress other buttons in [member " +"button_group]." +msgstr "" +"Change l'état [member button_pressed] du bouton, sans émettre [signal " +"toggled]. Utilisez lorsque vous voulez simplement changer l'état du bouton " +"sans envoyer l'événement quand il est manuellement pressé (par ex. 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ésélectionne pas les autres boutons dans son " +"[member button_group]." + msgid "" "Determines when the button is considered clicked, one of the [enum " "ActionMode] constants." @@ -4020,13 +5550,6 @@ msgstr "" "signaux seront toujours émis au même moment, peu importe la valeur de cette " "propriété." -msgid "" -"If [code]true[/code], the button will add information about its shortcut in " -"the tooltip." -msgstr "" -"Si [code]true[/code], le bouton ajoutera des informations sur son raccourci " -"dans l'infobulle." - msgid "" "If [code]true[/code], the button is in toggle mode. Makes the button flip " "state between pressed and unpressed each time its area is clicked." @@ -4227,6 +5750,9 @@ msgstr "La texture spécifiant la valeur du vernis par pixel." msgid "Texture specifying per-pixel ambient occlusion value." msgstr "La texture spécifiant la valeur de l'occlusion ambiante par pixel." +msgid "Texture specifying per-pixel height." +msgstr "La texture spécifiant la hauteur par pixel." + msgid "Texture specifying per-pixel subsurface scattering." msgstr "La texture spécifiant la transluminescence par pixel." @@ -4422,6 +5948,13 @@ msgstr "Utiliser les transformations 3D" msgid "Matrix Transform Demo" msgstr "Démo de transformation matricielle" +msgid "" +"Returns the [url=https://en.wikipedia.org/wiki/Invertible_matrix]inverse of " +"this basis's matrix[/url]." +msgstr "" +"Renvoie [url=https://fr.wikipedia.org/wiki/Matrice_inversible]l'inverse de la " +"matrice[/url] de cette base." + msgid "Boolean matrix." msgstr "Matrice booléenne." @@ -4483,14 +6016,6 @@ msgstr "" msgid "3D Kinematic Character Demo" msgstr "Démo de personnage cinématique en 3D" -msgid "" -"When this property is enabled, text that is too large to fit the button is " -"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." - msgid "Flat buttons don't display decoration." msgstr "Les boutons plats n’affichent pas de décoration." @@ -4542,23 +6067,6 @@ msgstr "Émis lorsqu’un des boutons de ce groupe est appuyé." msgid "Calls the specified method after optional delay." msgstr "Appelle la méthode spécifiée après un délai optionnel." -msgid "" -"Makes the callback call delayed by given time in seconds.\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_callback(queue_free).set_delay(2) #this will call queue_free() " -"after 2 seconds\n" -"[/codeblock]" -msgstr "" -"Retarde l'appel par le temps donné en secondes.\n" -"[b]Exemple :[/b]\n" -"[codeblock]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_callback(queue_free).set_delay(2) # Ceci va appeler queue_free() " -"après 2 secondes\n" -"[/codeblock]" - msgid "Camera node for 2D scenes." msgstr "Nœud de caméra pour les scènes en 2D." @@ -4614,6 +6122,17 @@ msgstr "" msgid "Camera node, displays from a point of view." msgstr "Un nœud de caméra ; affichage d'un point de vue." +msgid "" +"Returns the transform of the camera plus the vertical ([member v_offset]) and " +"horizontal ([member h_offset]) offsets; and any other adjustments made to the " +"position and orientation of the camera by subclassed cameras such as " +"[XRCamera3D]." +msgstr "" +"Renvoie la transformation de la caméra plus les décalages verticaux ([member " +"v_offset]) et horizontaux ([member h_offset]) et tout autre ajustement " +"apporté à la position et à l'orientation de la caméra par des caméras sous-" +"classées telles que [XRCamera3D]." + msgid "" "Makes this camera the current camera for the [Viewport] (see class " "description). If the camera node is outside the scene tree, it will attempt " @@ -4755,23 +6274,6 @@ msgstr "" "Un flux de caméra vous donne accès à une caméra physique qui est connectée à " "votre appareil." -msgid "" -"A camera feed gives you access to a single physical camera attached to your " -"device. When enabled, Godot will start capturing frames from the camera which " -"can then be used. See also [CameraServer].\n" -"[b]Note:[/b] Many cameras will return YCbCr images which are split into two " -"textures and need to be combined in a shader. Godot does this automatically " -"for you if you set the environment to show the camera image in the background." -msgstr "" -"Un flux de caméra vous donne accès à une caméra physique qui est connectée à " -"votre appareil. Lorsqu'il est activé, Godot commencera à capturer les images " -"de cette caméra qui pourront alors être utilisées. Voir aussi " -"[CameraServer].\n" -"[b]Note :[/b] Beaucoup de caméras renvoient des images au format YCbCr qui " -"sont divisées en deux textures et doivent être combinées dans un shader. " -"Godot le fera automatiquement si vous configurez l'environnement pour " -"afficher cette image comme arrière-plan." - msgid "Returns the unique ID for this feed." msgstr "Retourne l'identifiant unique de ce flux." @@ -4865,6 +6367,12 @@ msgstr "" "L'image du [CameraFeed] pour laquelle nous voulons accéder, important si " "l'image de la caméra est divisée en composants Y et CbCr." +msgid "Viewport and canvas transforms" +msgstr "Transformations du canevas et de la fenêtre d'affichage" + +msgid "Custom drawing in 2D" +msgstr "Dessin personnalisé en 2D" + msgid "" "Draws an unfilled arc between the given angles with a uniform [param color] " "and [param width] and optional antialiasing (supported only for positive " @@ -5025,12 +6533,6 @@ msgstr "" "l'indice Z. Si l'indice Z du nœud est de 2 et que l'indice Z actuel du parent " "est de 3, l'indice Z de ce nœud sera au final 2 + 3 = 5." -msgid "Emitted when becoming hidden." -msgstr "Émis en devenant caché." - -msgid "Emitted when the visibility (hidden/visible) changes." -msgstr "Émis lorsque la visibilité (cachée / visible) change." - msgid "" "The [CanvasItem]'s global transform has changed. This notification is only " "received if enabled by [method set_notify_transform]." @@ -5054,6 +6556,12 @@ msgstr "Le [CanvasItem] est entré dans le canevas." msgid "The [CanvasItem] has exited the canvas." msgstr "Le [CanvasItem] a quitté le canevas." +msgid "Texture will not repeat." +msgstr "La texture ne de répétera pas." + +msgid "Texture will repeat normally." +msgstr "La texture va se répéter normalement." + msgid "A material for [CanvasItem]s." msgstr "Un matériel pour les [CanvasItem]s." @@ -5159,6 +6667,9 @@ msgstr "" "Contrairement à [member CanvasItem.visible], la visibilité d'un [CanvasLayer] " "n'est pas propagée aux calques enfants." +msgid "2D lights and shadows" +msgstr "Les lumières et ombres 2D" + msgid "The tint color to apply." msgstr "La couleur de la teinte à appliquer." @@ -5293,9 +6804,6 @@ msgstr "" msgid "Returns the names of all the classes available." msgstr "Retourne le nom de toutes les classes disponibles." -msgid "Returns whether the line at the specified index is folded or not." -msgstr "Retourne si la ligne à l'index spécifié est réduite ou non." - msgid "Toggle the folding of the code block at the given line." msgstr "Réduit le bloc de code à la ligne donnée." @@ -5371,6 +6879,24 @@ msgstr "" "pointe sur l'objet, signaler par des événements d'entrée. Nécessite au moins " "un bit de [member collision_layer] d'être réglé." +msgid "" +"Receives unhandled [InputEvent]s. [param event_position] is the location in " +"world space of the mouse pointer on the surface of the shape with index " +"[param shape_idx] and [param normal] is the normal vector of the surface at " +"that point. Connect to the [signal input_event] signal to easily pick up " +"these events.\n" +"[b]Note:[/b] [method _input_event] requires [member input_ray_pickable] to be " +"[code]true[/code] and at least one [member collision_layer] bit to be set." +msgstr "" +"Reçoit les [InputEvent] non traités. [param event_position] est la position " +"dans l'espace global du curseur de la souris sur la surface de la forme avec " +"index [param shape_idx] et [param normal] 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.\n" +"[b]Note :[/b] [method _input_event] nécessite [member input_ray_pickable] " +"d'être [code]true[/code] et au moins un bit de [member collision_layer] " +"d'actif." + msgid "Collision build mode. Use one of the [enum BuildMode] constants." msgstr "" "Le mode d'assemblage. Utilisez l'une des constantes de [enum BuildMode]." @@ -5435,6 +6961,12 @@ msgstr "" msgid "The actual shape owned by this collision shape." msgstr "La forme réelle appartenant à cette forme de collision." +msgid "Use [signal Resource.changed] instead." +msgstr "Utilisez [signal Resource.changed] à la place." + +msgid "This method does nothing." +msgstr "Cette méthode ne fait rien." + msgid "A disabled collision shape has no effect in the world." msgstr "Une forme de collision désactivée n’a aucun effet dans le monde." @@ -6163,6 +7695,9 @@ msgstr "" "une alternative à [method Viewport.gui_is_drag_successful].\n" "Mieux utilisé avec [constant Node.NOTIFICATION_DRAG_END]." +msgid "Use [member Node.auto_translate_mode] instead." +msgstr "Utilisez [member Node.auto_translate_mode] à la place." + msgid "" "Controls the direction on the horizontal axis in which the control should " "grow if its horizontal minimum size is changed to be greater than its current " @@ -6608,6 +8143,12 @@ msgstr "" msgid "Right-to-left layout direction." msgstr "Disposition de direction de droite à gauche." +msgid "Left-to-right text writing direction." +msgstr "Direction d'écriture de texte de gauche à droite." + +msgid "Right-to-left text writing direction." +msgstr "Direction d'écriture de texte de droite à gauche." + msgid "The list of 3D points forming the convex polygon shape." msgstr "La liste des points 3D formant le polygone convexe." @@ -6617,30 +8158,6 @@ msgstr "Système de particules (2D)" msgid "Returns the [Curve] of the parameter specified by [enum Parameter]." msgstr "Retourne la [Curve] du paramètre spécifié par [enum Parameter]." -msgid "Restarts the particle emitter." -msgstr "Redémarre l'émetteur de particules." - -msgid "Sets the [Curve] of the parameter specified by [enum Parameter]." -msgstr "Définit la [Curve] du paramètre spécifié par [enum Parameter]." - -msgid "Each particle's rotation will be animated along this [Curve]." -msgstr "" -"La rotation de chaque particule sera animée en fonction de cette [Curve]." - -msgid "Each particle's angular velocity will vary along this [Curve]." -msgstr "" -"La vitesse angulaire de chaque particule sera animée en fonction de cette " -"[Curve]." - -msgid "Each particle's animation offset will vary along this [Curve]." -msgstr "" -"Le décalage de chaque particule sera animé en fonction de cette [Curve]." - -msgid "Each particle's animation speed will vary along this [Curve]." -msgstr "" -"La vitesse d'animation de chaque particule sera animée en fonction de cette " -"[Curve]." - msgid "" "Each particle's initial color. If [member texture] is defined, it will be " "multiplied by this color." @@ -6648,16 +8165,6 @@ msgstr "" "La couleur initiale de chaque particule. Si [member texture] est défini, les " "particules sont multipliées par cette couleur." -msgid "" -"Each particle's color will vary along this [Gradient] (multiplied with " -"[member color])." -msgstr "" -"Chaque couleur de particle varie selon ce [Gradient] (multiplié avec [member " -"color])." - -msgid "Damping will vary along this [Curve]." -msgstr "L'amortissement varie le long de cette [Curve]." - msgid "Unit vector specifying the particles' emission direction." msgstr "Le vecteur unitaire définissant la direction d'émission des particules." @@ -6725,17 +8232,9 @@ msgstr "" msgid "Gravity applied to every particle." msgstr "Gravité appliquée à chaque particule." -msgid "Each particle's hue will vary along this [Curve]." -msgstr "La teinte de chaque particule variera suivant cette [Curve]." - msgid "Particle lifetime randomness ratio." msgstr "Facteur d'aléatoire de la durée de vie d'une particule." -msgid "Each particle's linear acceleration will vary along this [Curve]." -msgstr "" -"L'accélération linéaire de chaque particule sera animée en fonction de cette " -"[Curve]." - msgid "" "If [code]true[/code], only one emission cycle occurs. If set [code]true[/" "code] during a cycle, emission will stop at the cycle's end." @@ -6744,11 +8243,6 @@ msgstr "" "[code]true[/code] pendant un cycle, l'émission s'arrêtera à la fin de ce " "cycle." -msgid "Each particle's orbital velocity will vary along this [Curve]." -msgstr "" -"La vitesse orbitale de chaque particule sera animée en fonction de cette " -"[Curve]." - msgid "Align Y axis of particle with the direction of its velocity." msgstr "Aligner l’axe Y de la particule avec la direction de sa vélocité." @@ -6757,17 +8251,9 @@ msgstr "" "Le système de particules démarre comme s'il avait déjà commencé depuis " "plusieurs secondes." -msgid "Each particle's radial acceleration will vary along this [Curve]." -msgstr "" -"L'accélération radiale de chaque particule sera animée en fonction de cette " -"[Curve]." - msgid "Emission lifetime randomness ratio." msgstr "Facteur d'aléatoire de durée de vie de l'émission." -msgid "Each particle's scale will vary along this [Curve]." -msgstr "La mise à l'échelle de chaque particule variera suivant cette [Curve]." - msgid "" "Particle system's running speed scaling ratio. A value of [code]0[/code] can " "be used to pause the particles." @@ -6782,11 +8268,6 @@ msgstr "" "La direction initiale de chaque particules sera comprise entre [code]+spread[/" "code] et [code]-spread[/code] degrés." -msgid "Each particle's tangential acceleration will vary along this [Curve]." -msgstr "" -"L'accélération tangentielle de chaque particule sera animée en fonction de " -"cette [Curve]." - msgid "Particle texture. If [code]null[/code], particles will be squares." msgstr "" "La texture des particules. Si [code]null[/code], les particules seront " @@ -6846,6 +8327,12 @@ msgstr "Angle maximum." msgid "Minimum angle." msgstr "Angle minimum." +msgid "Maximum particle animation speed." +msgstr "Vitesse d’animation maximale des particules." + +msgid "Minimum particle animation speed." +msgstr "Vitesse d’animation minimale des particules." + msgid "Maximum damping." msgstr "Amortissement maximum." @@ -6924,6 +8411,9 @@ msgstr "" "code] à [code]-spread[/code] degrés. Appliquée aux plans sur X/Z et aux plans " "sur Y/Z." +msgid "Maximum tangent acceleration." +msgstr "Accélération tangente maximale." + msgid "Minimum tangent acceleration." msgstr "Accélération de tangente minimum." @@ -7017,42 +8507,81 @@ msgid "" "[/codeblocks]" msgstr "" "La classe Crypto permet d'accéder à des fonctionnalités cryptographiques plus " -"avancées dans Godot.\n" -"Pour l'instant, cela inclus la génération de données aléatoires pour des " -"utilisations cryptographiques, la génération de clés RSA et de certificats " -"auto-signés X509, de clé asymétriques de cryptage/décryptage, la signature et " -"la vérification.\n" -"[codeblock]\n" -"extends Node\n" -"\n" +"avancées.\n" +"Pour l'instant, cela inclut l'encryptage/décryptage de clé asymétrique, la " +"signature/vérification, et la génération cryptographique sécurisée de bytes " +"aléatoires, de clés RSA, de HMAC et de [X509Certificate]s auto-signés.\n" +"[codeblocks]\n" +"[gdscript]\n" "var crypto = Crypto.new()\n" -"var key = CryptoKey.new()\n" -"var cert = X509Certificate.new()\n" "\n" -"func _ready():\n" -" # Générer une nouvelle clé RSA.\n" -" key = crypto.generate_rsa(4096)\n" -" # Générer un nouveau certificat auto-signé avec le clé.\n" -" cert = crypto.generate_self_signed_certificate(key, \"CN=mydomain.com," +"# Générer une nouvelle clé RSA.\n" +"var key = crypto.generate_rsa(4096)\n" +"\n" +"# Générer un nouveau certificat auto-signé avec le clé.\n" +"var cert = crypto.generate_self_signed_certificate(key, \"CN=mydomain.com," "O=My Game Company,C=IT\")\n" -" # Enregistrer la clé et le certificat dans le dossier utilisateur.\n" -" key.save(\"user://generated.key\")\n" -" cert.save(\"user://generated.crt\")\n" -" # Cryptage\n" -" var data = \"Des données\"\n" -" var encrypted = crypto.encrypt(key, data.to_utf8())\n" -" # Décryptage\n" -" var decrypted = crypto.decrypt(key, encrypted)\n" -" # Signature\n" -" var signature = crypto.sign(HashingContext.HASH_SHA256, data." -"sha256_buffer(), key)\n" -" # Vérification\n" -" var verified = crypto.verify(HashingContext.HASH_SHA256, data." +"\n" +"# Enregistrer la clé et le certificat dans le dossier utilisateur.\n" +"key.save(\"user://generated.key\")\n" +"cert.save(\"user://generated.crt\")\n" +"\n" +"# Cryptage\n" +"var data = \"Some data\"\n" +"var encrypted = crypto.encrypt(key, data.to_utf8_buffer())\n" +"\n" +"# Décryptage\n" +"var decrypted = crypto.decrypt(key, encrypted)\n" +"\n" +"# Signature\n" +"var signature = crypto.sign(HashingContext.HASH_SHA256, data.sha256_buffer(), " +"key)\n" +"\n" +"# Vérification\n" +"var verified = crypto.verify(HashingContext.HASH_SHA256, data." "sha256_buffer(), signature, key)\n" -" # Tests\n" -" assert(verified)\n" -" assert(data.to_utf8() == decrypted)\n" -"[/codeblock]" +"\n" +"# Tests\n" +"assert(verified)\n" +"assert(data.to_utf8_buffer() == decrypted)\n" +"[/gdscript]\n" +"[csharp]\n" +"using Godot;\n" +"using System.Diagnostics;\n" +"\n" +"Crypto crypto = new Crypto();\n" +"\n" +"// Générer une nouvelle clé RSA.\n" +"CryptoKey key = crypto.GenerateRsa(4096);\n" +"\n" +"// Générer un nouveau certificat auto-signé avec le clé.\n" +"X509Certificate cert = crypto.GenerateSelfSignedCertificate(key, " +"\"CN=mydomain.com,O=My Game Company,C=IT\");\n" +"\n" +"// Enregistrer la clé et le certificat dans le dossier utilisateur.\n" +"key.Save(\"user://generated.key\");\n" +"cert.Save(\"user://generated.crt\");\n" +"\n" +"// Cryptage\n" +"string data = \"Some data\";\n" +"byte[] encrypted = crypto.Encrypt(key, data.ToUtf8Buffer());\n" +"\n" +"// Décryptage\n" +"byte[] decrypted = crypto.Decrypt(key, encrypted);\n" +"\n" +"// Signature\n" +"byte[] signature = crypto.Sign(HashingContext.HashType.Sha256, Data." +"Sha256Buffer(), key);\n" +"\n" +"// Vérification\n" +"bool verified = crypto.Verify(HashingContext.HashType.Sha256, Data." +"Sha256Buffer(), signature, key);\n" +"\n" +"// Tests\n" +"Debug.Assert(verified);\n" +"Debug.Assert(data.ToUtf8Buffer() == decrypted);\n" +"[/csharp]\n" +"[/codeblocks]" msgid "SSL certificates" msgstr "Certificats SSL" @@ -7060,6 +8589,9 @@ msgstr "Certificats SSL" msgid "A CSG Box shape." msgstr "Une forme CSG en boite." +msgid "Prototyping levels with CSG" +msgstr "Prototyper des niveaux avec CSG" + msgid "The material used to render the box." msgstr "Le matériau utilisé pour rendre la boite." @@ -7311,6 +8843,9 @@ msgstr "" "lisse donnant l'impression que le tore est arrondis. Si [code]false[/code] le " "tore aura un aspect de rendu plat." +msgid "C# documentation index" +msgstr "Index de documentation C#" + msgid "Returns a new instance of the script." msgstr "Retourne une nouvelle instance du script." @@ -7340,12 +8875,6 @@ msgstr "Définit le décalage à partir de [code]0.5[/code]." msgid "The number of points to include in the baked (i.e. cached) curve data." msgstr "Le nombre de points à inclure dans les données de cache de la courbe." -msgid "The maximum value the curve can reach." -msgstr "La valeur maximale que la courbe peut atteindre." - -msgid "The minimum value the curve can reach." -msgstr "La valeur minimale que la courbe peut atteindre." - msgid "Emitted when [member max_value] or [member min_value] is changed." msgstr "Émis quand [member max_value] ou [member min_value] est changé." @@ -7417,9 +8946,6 @@ msgstr "" "est petite, plus il y aura de points dans le cache, et plus ça utilisera de " "mémoire, à utiliser donc avec soin." -msgid "The [Curve] that is rendered onto the texture." -msgstr "La [Curve] qui est rendue dans la texture." - msgid "" "The width of the texture (in pixels). Higher values make it possible to " "represent high-frequency data better (such as sudden direction changes), at " @@ -7462,6 +8988,9 @@ msgstr "Le rayon du cylindre." msgid "GDScript basics: Dictionary" msgstr "Les bases de GDScript : Les dictionnaires" +msgid "Constructs an empty [Dictionary]." +msgstr "Construit un [Dictionary] vide." + msgid "File system" msgstr "Le système de fichiers" @@ -7475,13 +9004,6 @@ msgstr "" "parent [code]..[/code] comptent aussi des dossiers ordinaires pour cette " "méthode)." -msgid "" -"Returns whether the target directory exists. The argument can be relative to " -"the current directory, or an absolute path." -msgstr "" -"Retourne quand le dossier cible existe. L'argument peut être relatif au " -"dossier actuel, ou un chemin absolu." - msgid "" "Returns the absolute path to the currently opened directory (e.g. [code]res://" "folder[/code] or [code]C:\\tmp\\folder[/code])." @@ -7606,9 +9128,21 @@ msgstr "Rend le curseur visible de la souris s'il caché." msgid "Makes the mouse cursor hidden if it is visible." msgstr "Masque le curseur de la souris s'il visible." +msgid "Default landscape orientation." +msgstr "Orientation en mode paysage par défaut." + +msgid "Multiline virtual keyboard." +msgstr "Clavier virtuel multiligne." + msgid "Helper class to implement a DTLS server." msgstr "Une classe d'aide pour implémenter un serveur DTLS." +msgid "Console support in Godot" +msgstr "Support de la console dans Godot" + +msgid "Exporter for Android." +msgstr "Exporteur pour Android." + msgid "Exporting for Android" msgstr "Exportation pour Android" @@ -7670,7 +9204,7 @@ msgstr "" "[method export_begin] est appelé au début du processus d'exportation, et " "[method export_file] est appelé pour chaque fichier exporté.\n" "Pour utiliser [EditorExportPlugin], enregistrez-le d'abord avec la méthode " -"[method EditorPlugin.add_export_greffon]." +"[method EditorPlugin.add_export_plugin]." msgid "" "Virtual method to be overridden by the user. Called when the export is " @@ -7770,9 +9304,6 @@ msgstr "" msgid "A modified version of [FileDialog] used by the editor." msgstr "Une version modifié du [FileDialog] utilisé par l'éditeur." -msgid "Removes all filters except for \"All Files (*)\"." -msgstr "Retire tous les filtres sauf \"Tous les fichiers (*)\"." - msgid "" "Notify the [EditorFileDialog] that its view of the data is no longer " "accurate. Updates the view contents on next view update." @@ -8126,6 +9657,9 @@ msgstr "Retourne l'actuel chemin en train d'être vu dans le [FileSystemDock]." msgid "Returns the edited (current) scene's root [Node]." msgstr "Retourne le [Node] racine de l'actuelle scène éditée." +msgid "Returns the [EditorPaths] singleton." +msgstr "Renvoie le singleton [EditorPaths]." + msgid "" "Returns the actual scale of the editor UI ([code]1.0[/code] being 100% " "scale). This can be used to adjust position and dimensions of the UI added by " @@ -8191,9 +9725,6 @@ msgstr "" msgid "Returns the editor's [EditorSelection] instance." msgstr "Retourne l'instance [EditorSelection] de l'éditeur." -msgid "Opens the scene at the given path." -msgstr "Ouvre la scène à l'emplacement spécifié." - msgid "Plays the currently active scene." msgstr "Joue la scène actuellement active." @@ -8398,9 +9929,6 @@ msgstr "" msgid "Removes an import plugin registered by [method add_import_plugin]." msgstr "Supprime un plugin importé inscrit par [method add_import_plugin]." -msgid "Removes an inspector plugin registered by [method add_import_plugin]" -msgstr "Supprime un plugin d'inspecteur inscrit par [method add_import_plugin]" - msgid "Removes a gizmo plugin registered by [method add_node_3d_gizmo_plugin]." msgstr "" "Supprime un plugin manipulateur ajouté par [method add_node_3d_gizmo_plugin]." @@ -8427,6 +9955,9 @@ msgstr "" "[b]Script[/b], [b]AssetLib[/b]). Fonctionne aussi avec les écrans " "personnalisés définis par des greffons." +msgid "Use [signal ProjectSettings.settings_changed] instead." +msgstr "Utilisez [signal ProjectSettings.settings_changed] à la place." + msgid "" "Emitted when the scene is changed in the editor. The argument will return the " "root node of the scene that has just become active. If this scene is new and " @@ -8605,15 +10136,6 @@ msgstr "Supprime un générateur d’aperçu personnalisé." msgid "Custom generator of previews." msgstr "Générateur personnalisé d'aperçus." -msgid "" -"Custom code to generate previews. Please check [code]file_dialog/" -"thumbnail_size[/code] in [EditorSettings] to find out the right size to do " -"previews at." -msgstr "" -"Le Code personnalisé pour générer des aperçus. Veuillez cocher " -"[code]file_dialog/thumbnail_size[/code] dans [EditorSettings] pour connaître " -"la taille correcte des prévisualisations." - msgid "Imports scenes from third-parties' 3D files." msgstr "Importe des scènes à partir de fichiers 3D de tiers." @@ -8779,6 +10301,9 @@ msgstr "" "Émis quand la version de n'importe quel historique a changé à cause d'un " "appel d'annulation ou de retour en arrière." +msgid "Version control systems" +msgstr "Systèmes de contrôle de version" + msgid "" "Returns an [Array] of [String]s, each containing the name of a remote " "configured in the VCS." @@ -8834,9 +10359,18 @@ msgstr "" "L'encodage intégré d'ENet. Fonctionne bien sur les petits paquets, mais n'est " "pas l'algorithme le plus efficace pour les paquets de plus de 4 KB." +msgid "Total data sent." +msgstr "Total de données envoyées." + +msgid "Total UDP packets sent." +msgstr "Total de paquets UDP envoyés." + msgid "Total data received." msgstr "Total de donnés reçues." +msgid "Total UDP packets received." +msgstr "Total de paquets UDP reçus." + msgid "High-level multiplayer" msgstr "API multijoueur de haut niveau" @@ -8863,6 +10397,9 @@ msgstr "L'identifiant du flux de la caméra à afficher en arrière-plan." msgid "The background mode. See [enum BGMode] for possible values." msgstr "Le mode d'arrière-plan. Voir [enum BGMode] pour les valeurs possibles." +msgid "The fog's color." +msgstr "La couleur du brouillard." + msgid "The depth tolerance for screen-space reflections." msgstr "La tolérance de profondeur pour les réflexions sur l'espace de l'écran." @@ -8894,6 +10431,9 @@ msgstr "Retourne [code]true[/code] si [method execute] a échoué." msgid "No fractal noise." msgstr "Pas de bruit de fractal." +msgid "Handles FBX documents." +msgstr "Gère les documents FBX." + msgid "" "Returns the next 8 bits from the file as an integer. See [method store_8] for " "details on what values can be stored and retrieved this way." @@ -8942,9 +10482,6 @@ msgid "Returns the next 32 bits from the file as a floating-point number." msgstr "" "Retourne les 32 bits suivants du fichier en les interprétant en un flottant." -msgid "Returns the size of the file in bytes." -msgstr "Retourne la taille du fichier en octets." - msgid "" "Returns an MD5 String representing the file at the given path or an empty " "[String] on failure." @@ -8971,27 +10508,6 @@ msgstr "Retourne la position du curseur du fichier." msgid "Returns [code]true[/code] if the file is currently opened." msgstr "Retourne [code]true[/code] si le fichier est actuellement ouvert." -msgid "Stores the given array of bytes in the file." -msgstr "Enregistre le tableau spécifié en octets dans le fichier." - -msgid "Stores a floating-point number as 64 bits in the file." -msgstr "Enregistre un flottant 64 bits dans le fichier." - -msgid "Stores a floating-point number as 32 bits in the file." -msgstr "Enregistre un flottant 32 bits dans le fichier." - -msgid "" -"Stores the given [String] as a line in the file in Pascal format (i.e. also " -"store the length of the string).\n" -"Text will be encoded as UTF-8." -msgstr "" -"Enregistre la [String] donnée dans une nouvelle ligne au format Pascal " -"(enregistre aussi la longueur de la chaine de caractères).\n" -"Le texte sera codé en UTF-8." - -msgid "Stores a floating-point number in the file." -msgstr "Stocke un nombre à virgule flottante dans le fichier." - msgid "" "Opens the file for read operations. The cursor is positioned at the beginning " "of the file." @@ -9082,6 +10598,9 @@ msgstr "Icône personnalisée pour le bouton de rechargement." msgid "Custom icon for the toggle hidden button." msgstr "L'icône personnalisé pour le bouton d'affichage." +msgid "Registers a new [EditorResourceTooltipPlugin]." +msgstr "Enregistre un nouveau [EditorResourceTooltipPlugin]." + msgid "Wikipedia: Double-precision floating-point format" msgstr "Wikipédia : Le format des nombres flottants à double précision" @@ -9095,15 +10614,42 @@ msgstr "" "Transforme un [bool] en flottant, donc [code]float(true)[/code] sera égal à " "1.0 et [code]float(false)[/code] à 0.0." +msgid "Multiplies two [float]s." +msgstr "Multiplie deux [float]." + +msgid "Adds two floats." +msgstr "Ajoute deux flottants." + +msgid "Divides two floats." +msgstr "Divise deux flottants." + msgid "Returns the current line count." msgstr "Retourne le numéro de la ligne actuelle." +msgid "Returns font family name." +msgstr "Renvoie le nom de la famille de police." + +msgid "Sets glyph size." +msgstr "Définit la taille du glyphe." + +msgid "Font anti-aliasing mode." +msgstr "Mode d'anticrénelage de la police." + +msgid "Font family name." +msgstr "Nom de la famille de police." + msgid "GDExtension overview" msgstr "Vue d'ensemble GDExtension" +msgid "GDExtension example in C++" +msgstr "Exemple de GDExtension en C++" + msgid "A script implemented in the GDScript programming language." msgstr "Un script implémenté dans le langage de programmation GDScript." +msgid "GDScript documentation index" +msgstr "Index de documentation GDScript" + msgid "If [code]true[/code], rotation across the X axis is limited." msgstr "Si [code]true[/code], la rotation autour de l'axe X est limité." @@ -9266,72 +10812,6 @@ msgstr "" "l'un de l'autre. Retourne un [PackedVector2Array] qui contient le point sur " "([param p1], [param q1]) ainsi que celui sur ([param p2], [param q2])." -msgid "" -"Inflates or deflates [param polygon] by [param delta] units (pixels). If " -"[param delta] is positive, makes the polygon grow outward. If [param delta] " -"is negative, shrinks the polygon inward. Returns an array of polygons because " -"inflating/deflating may result in multiple discrete polygons. Returns an " -"empty array if [param delta] is negative and the absolute value of it " -"approximately exceeds the minimum bounding rectangle dimensions of the " -"polygon.\n" -"Each polygon's vertices will be rounded as determined by [param join_type], " -"see [enum PolyJoinType].\n" -"The operation may result in an outer polygon (boundary) and inner polygon " -"(hole) produced which could be distinguished by calling [method " -"is_polygon_clockwise].\n" -"[b]Note:[/b] To translate the polygon's vertices specifically, multiply them " -"to a [Transform2D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var polygon = PackedVector2Array([Vector2(0, 0), Vector2(100, 0), " -"Vector2(100, 100), Vector2(0, 100)])\n" -"var offset = Vector2(50, 50)\n" -"polygon = Transform2D(0, offset) * polygon\n" -"print(polygon) # prints [(50, 50), (150, 50), (150, 150), (50, 150)]\n" -"[/gdscript]\n" -"[csharp]\n" -"var polygon = new Vector2[] { new Vector2(0, 0), new Vector2(100, 0), new " -"Vector2(100, 100), new Vector2(0, 100) };\n" -"var offset = new Vector2(50, 50);\n" -"polygon = new Transform2D(0, offset) * polygon;\n" -"GD.Print((Variant)polygon); // prints [(50, 50), (150, 50), (150, 150), (50, " -"150)]\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Gonfle ou dégonfle [param polygon] par la quantité [param delta] unités " -"(pixels) dans toutes les directions. Si [param delta] est positif, le " -"polygone décale chaque sommet vers l'extérieur. Si [code]delta[/code] est " -"négatif, décale chaque sommet vers l'intérieur. Retourne une liste des " -"polygones parce que gonflage/dégonflage peut produire plusieurs polygones " -"distinctes. Retourne un tableau vide si [code]delta[/code] est négatif et la " -"valeur absolue de celui-ci dépasse approximativement les dimensions du " -"rectangle minimal englobant du polygone.\n" -"Les sommets de chaque polygone sont arrondis suivant [code]join_type[/code], " -"voir [enum PolyJoinType].\n" -"L'opération peut fournir un polygone extérieur (la limite extérieure) et " -"plusieurs polygones à intérieur (représentant les trous) qui pourraient être " -"distingués en appelant [method is_polygon_clockwise].\n" -"[b]Note :[/b] Pour transformer les sommets en polygone, utilisez la méthode " -"[method Transform2D.xform] :\n" -"[codeblocks]\n" -"[gdscript]\n" -"var polygon = PackedVector2Array([Vector2(0, 0), Vector2(100, 0), " -"Vector2(100, 100), Vector2(0, 100)])\n" -"var offset = Vector2(50, 50)\n" -"polygon = Transform2D(0, offset) * polygon\n" -"print(polygon) # prints [(50, 50), (150, 50), (150, 150), (50, 150)]\n" -"[/gdscript]\n" -"[csharp]\n" -"var polygon = new Vector2[] { new Vector2(0, 0), new Vector2(100, 0), new " -"Vector2(100, 100), new Vector2(0, 100) };\n" -"var offset = new Vector2(50, 50);\n" -"polygon = new Transform2D(0, offset) * polygon;\n" -"GD.Print((Variant)polygon); // prints [(50, 50), (150, 50), (150, 150), (50, " -"150)]\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "Endpoints are squared off with no extension." msgstr "Les bouts sont carrés sans être allongés." @@ -9355,6 +10835,9 @@ msgstr "" msgid "Base node for geometry-based visual instances." msgstr "Nœud de base pour les instances visuelles basées sur la géométrie." +msgid "Visibility ranges (HLOD)" +msgstr "Portée de visibilité (Niveau de détail hiérarchique)" + msgid "" "Will only show the shadows casted from this object.\n" "In other words, the actual mesh will not be visible, only the shadows casted " @@ -9364,11 +10847,11 @@ msgstr "" "En d’autres termes, le mesh réel ne sera pas visible, seules les ombres " "projetées à partir du mesh le seront." -msgid "Represents a GLTF camera." -msgstr "Représente une caméra GLTF." +msgid "Khronos glTF specification" +msgstr "Spécification de glTF Khronos" -msgid "Represents a GLTF light." -msgstr "Représente une lumière GLTF." +msgid "[GLTFDocument] extension class." +msgstr "Classe d'extension de [GLTFDocument]." msgid "" "The [Color] of the light. Defaults to white. A black color causes the light " @@ -9388,16 +10871,6 @@ msgstr "" "pour les lumières directionnels. En créant une lumière, cette valeur est " "convertie en un multiplicateur sans unité." -msgid "" -"The range of the light, beyond which the light has no effect. GLTF lights " -"with no range defined behave like physical lights (which have infinite " -"range). When creating a Godot light, the range is clamped to 4096." -msgstr "" -"La portée de la lumière, au-delà de laquelle la lumière n'a plus aucun effet. " -"Les feux GLTF sans limite de portée définie se comportent comme des lumières " -"physiques (qui ont une portée infinie). Lors de la création d'une lumière " -"Godot, la portée est fixée à 4096 unités." - msgid "2D Particles Demo" msgstr "Démo des particules en 2D" @@ -9440,6 +10913,9 @@ msgstr "" msgid "Cubic interpolation." msgstr "Interpolation cubique." +msgid "sRGB color space." +msgstr "Espace de couleur sRGB." + msgid "The [Gradient] used to fill the texture." msgstr "Le [Gradient] utilisé pour remplir la texture." @@ -9607,6 +11083,17 @@ msgstr "L'icône pour le bouton du rétablissement du zoom." msgid "The background drawn under the grid." msgstr "L’arrière-plan dessiné sous la grille." +msgid "" +"If [code]true[/code], the user can resize the GraphElement.\n" +"[b]Note:[/b] Dragging the handle will only emit the [signal resize_request] " +"and [signal resize_end] signals, the GraphElement needs to be resized " +"manually." +msgstr "" +"Si [code]true[/code], l'utilisateur peut redimensionner le GraphElement.\n" +"[b]Note :[/b] Faire glisser la poignée n'émettra que les signaux [signal " +"resize_request] et [signal resize_end], le GraphElement doit être " +"redimensionné manuellement." + msgid "The color modulation applied to the resizer icon." msgstr "La couleur de modulation appliquée à l'icône de redimensionnement." @@ -9731,6 +11218,9 @@ msgstr "" msgid "Low-level hyper-text transfer protocol client." msgstr "Client de protocole de transfert hypertexte de bas niveau." +msgid "HTTP client class" +msgstr "Classe de client HTTP" + msgid "TLS certificates" msgstr "Certificats TLS" @@ -9744,32 +11234,6 @@ msgstr "Retourne le code d’état de la réponse HTTP." msgid "Returns the response headers." msgstr "Retourne les en-têtes de réponse." -msgid "" -"Returns all response headers as a Dictionary of structure [code]{ \"key\": " -"\"value1; value2\" }[/code] where the case-sensitivity of the keys and values " -"is kept like the server delivers it. A value is a simple String, this string " -"can have more than one value where \"; \" is used as separator.\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"{\n" -" \"content-length\": 12,\n" -" \"Content-Type\": \"application/json; charset=UTF-8\",\n" -"}\n" -"[/codeblock]" -msgstr "" -"Retourne toutes les entêtes de la réponse dans un Dictionary avec la " -"structure [code]{ \"key\": \"value1; value2\" }[/code] où les clés et valeurs " -"sont dans la même casse que le serveur les a envoyées. Une valeur est une " -"simple chaine de caractères, qui peut avoir une ou plusieurs valeurs séparées " -"par \"; \".\n" -"[b]Exemple :[/b]\n" -"[codeblock]\n" -"{\n" -" \"content-length\": 12,\n" -" \"Content-Type\": \"application/json; charset=UTF-8\",\n" -"}\n" -"[/codeblock]" - msgid "" "Returns a [enum Status] constant. Need to call [method poll] in order to get " "status updates." @@ -9950,23 +11414,6 @@ msgstr "" "serveur a reçu la requête et la traite, mais aucune réponse n'est disponible " "pour l'instant." -msgid "" -"HTTP status code [code]200 OK[/code]. The request has succeeded. Default " -"response for successful requests. Meaning varies depending on the request. " -"GET: The resource has been fetched and is transmitted in the message body. " -"HEAD: The entity headers are in the message body. POST: The resource " -"describing the result of the action is transmitted in the message body. " -"TRACE: The message body contains the request message as received by the " -"server." -msgstr "" -"Le code d'état HTTP [code]200 OK[/code]. La requête a réussi. C'est la " -"réponse par défaut pour les requêtes réussies. La signification varie selon " -"la requête. Pour \"GET\" : La ressource a été récupérée et est transmise dans " -"le corps du message. Pour \"HEAD\" : Les en-têtes de l'entité sont dans le " -"corps du message. Pour \"POST\" : La ressource décrivant le résultat de " -"l'action est transmise dans le corps du message. Pour \"TRACE\" : Le corps du " -"message contient le message de requête reçu par le serveur." - msgid "" "HTTP status code [code]201 Created[/code]. The request has succeeded and a " "new resource has been created as a result of it. This is typically the " @@ -10080,6 +11527,12 @@ msgstr "" "de réponse signifie que l'URI des ressources demandées a été modifiée. La " "nouvelle URI est généralement retournée dans cette réponse." +msgid "HTTP status code [code]305 Use Proxy[/code]." +msgstr "Code de status HTTP [code]305 Use Proxy[/code]." + +msgid "HTTP status code [code]306 Switch Proxy[/code]." +msgstr "Code de status HTTP [code]306 Switch Proxy[/code]." + msgid "" "HTTP status code [code]409 Conflict[/code]. The request could not be " "completed due to a conflict with the current state of the target resource. " @@ -10094,6 +11547,9 @@ msgstr "" msgid "A node with the ability to send HTTP(S) requests." msgstr "Un nœud qui permet d'envoyer des requêtes HTTP(S)." +msgid "Making HTTP requests" +msgstr "Faire des requêtes HTTP" + msgid "Cancels the current request." msgstr "Annule la demande en cours." @@ -10150,6 +11606,9 @@ msgstr "Retire les mipmaps de l'image." msgid "Converts the image's format. See [enum Format] constants." msgstr "Convertit le format de l’image. Voir les constantes [enum Format]." +msgid "Use [method create_empty]." +msgstr "Utilisez [method create_empty]." + msgid "" "Returns [constant ALPHA_BLEND] if the image has data for alpha values. " "Returns [constant ALPHA_BIT] if all the alpha values are stored in a single " @@ -10201,10 +11660,6 @@ msgid "" msgstr "" "Convertit une image RGBE (« Red Green Blue Exponent ») standard en image sRGB." -msgid "Converts the raw data from the sRGB colorspace to a linear scale." -msgstr "" -"Convertit des données brutes depuis l'espace de couleur sRGB en linéaire." - msgid "" "Holds all the image's color data in a given format. See [enum Format] " "constants." @@ -10597,6 +12052,15 @@ msgstr "" "L'index du touché dans le cas d'un événement de multi-touch. Un index = un " "doigt (un point de contact)." +msgid "State of the [kbd]Alt[/kbd] modifier." +msgstr "L'état du modificateur [code]Alt[/code]." + +msgid "State of the [kbd]Ctrl[/kbd] modifier." +msgstr "L'état du modificateur [code]Ctrl[/code] (Contrôle)." + +msgid "State of the [kbd]Shift[/kbd] modifier." +msgstr "L'état du modificateur [code]Shift[/code] (Majuscule)." + msgid "" "Adds an [InputEvent] to an action. This [InputEvent] will trigger the action." msgstr "" @@ -10869,10 +12333,7 @@ msgid "Only allow selecting a single item." msgstr "Ne permet de sélectionner qu'un seul élément." msgid "Default text [Color] of the item." -msgstr "La [Color] par défaut du texte de l'élément." - -msgid "Text [Color] used when the item is selected." -msgstr "La [Color] du texte utilisée quand l'élément est sélectionné." +msgstr "La [Color] par défaut du texte de l'élément." msgid "" "[Color] of the guideline. The guideline is a line drawn between each row of " @@ -10939,6 +12400,115 @@ msgstr "" "Essaie de parser le [param json_string] fourni et retourne les données " "parsées. Retourne [code]null[/code] si l'analyse du string a échouée." +msgid "" +"Converts a [Variant] var to JSON text and returns the result. Useful for " +"serializing data to store or send over the network.\n" +"[b]Note:[/b] The JSON specification does not define integer or float types, " +"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text " +"will convert all numerical values to [float] types.\n" +"[b]Note:[/b] If [param full_precision] is [code]true[/code], when " +"stringifying floats, the unreliable digits are stringified in addition to the " +"reliable digits to guarantee exact decoding.\n" +"The [param indent] parameter controls if and how something is indented; its " +"contents will be used where there should be an indent in the output. Even " +"spaces like [code]\" \"[/code] will work. [code]\\t[/code] and [code]\\n[/" +"code] can also be used for a tab indent, or to make a newline for each indent " +"respectively.\n" +"[b]Example output:[/b]\n" +"[codeblock]\n" +"## JSON.stringify(my_dictionary)\n" +"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":" +"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":" +"\"value_1\"}]}\n" +"\n" +"## JSON.stringify(my_dictionary, \"\\t\")\n" +"{\n" +" \"name\": \"my_dictionary\",\n" +" \"version\": \"1.0.0\",\n" +" \"entities\": [\n" +" {\n" +" \"name\": \"entity_0\",\n" +" \"value\": \"value_0\"\n" +" },\n" +" {\n" +" \"name\": \"entity_1\",\n" +" \"value\": \"value_1\"\n" +" }\n" +" ]\n" +"}\n" +"\n" +"## JSON.stringify(my_dictionary, \"...\")\n" +"{\n" +"...\"name\": \"my_dictionary\",\n" +"...\"version\": \"1.0.0\",\n" +"...\"entities\": [\n" +"......{\n" +".........\"name\": \"entity_0\",\n" +".........\"value\": \"value_0\"\n" +"......},\n" +"......{\n" +".........\"name\": \"entity_1\",\n" +".........\"value\": \"value_1\"\n" +"......}\n" +"...]\n" +"}\n" +"[/codeblock]" +msgstr "" +"Convertit une variable [Variant] en texte JSON et renvoie le résultat. Utile " +"pour sérialiser les données pour les enregistrer ou les envoyer à travers le " +"réseau.\n" +"[b]Note :[/b] Les spécifications du JSON ne définissent pas de différence " +"entre les entiers et les flottants, et ne définissent que le type commun " +"[i]nombre[/i]. Donc, convertir un Variant en JSON transformera tous les " +"nombres en [float].\n" +"[b]Note :[/b] Si [param full_precision] est [code]true[/code], lors de la " +"conversion des flottants, les chiffres non fiables sont convertis avec les " +"chiffres fiables pour garantir un décodage exact.\n" +"La paramètre [param indent] contrôle si et comment le JSON doit être indenté, " +"la chaine de caractères utilisé pour ce paramètre sera utilisé pour " +"l'indentation de la sortie, et même les espaces [code]\" \"[/code] " +"fonctionneront. [code]\\t[/code] et [code]\\n[/code] peuvent aussi être " +"utilisé pour la tabulation, ou pour le retour à la ligne, respectivement.\n" +"[b]Exemples de sortie :[/b]\n" +"[codeblock]\n" +"## JSON.print(my_dictionary) # À la suite, sans aucun retour à la ligne\n" +"{\"name\":\"mon_dictionnaire\",\"version\":\"1.0.0\",\"entities\":[{\"name\":" +"\"élément_0\",\"value\":\"valeur_0\"},{\"name\":\"élément_1\",\"value\":" +"\"valeur_1\"}]}\n" +"\n" +"## JSON.print(my_dictionary, \"\\t\") # Retour à la ligne avec tabulation\n" +"{\n" +" \"name\": \"mon_dictionnaire\",\n" +" \"version\": \"1.0.0\",\n" +" \"entities\": [\n" +" {\n" +" \"name\": \"élément_0\",\n" +" \"value\": \"valeur_0\"\n" +" },\n" +" {\n" +" \"name\": \"élément_1\",\n" +" \"value\": \"valeur_1\"\n" +" }\n" +" ]\n" +"}\n" +"\n" +"## JSON.print(my_dictionary, \"...\") # Retour à la ligne avec \"...\"\n" +"{\n" +"...\"name\": \"mon_dictionnaire\",\n" +"...\"version\": \"1.0.0\",\n" +"...\"entities\": [\n" +"......{\n" +".........\"name\": \"élément_0\",\n" +".........\"value\": \"valeur_0\"\n" +"......},\n" +"......{\n" +".........\"name\": \"élément_1\",\n" +".........\"value\": \"valeur_1\"\n" +"......}\n" +"...]\n" +"}\n" +"[/codeblock]" + msgid "Limits the lines of text the node shows on screen." msgstr "Limite le nombre de lignes de texte que le nœud affiche à l'écran." @@ -10954,9 +12524,6 @@ msgstr "La [Color] par défaut du texte du [Label]." msgid "[Color] of the text's shadow effect." msgstr "La [Color] de l'ombre du texte." -msgid "Vertical space between lines in multiline [Label]." -msgstr "L'espace vertical entre les lignes en multiligne [Label]." - msgid "The horizontal offset of the text's shadow." msgstr "Le décalage horizontal de l'ombre du texte." @@ -10989,10 +12556,6 @@ msgstr "" "Si [code]true[/code], le label est affiché à la même taille indépendamment de " "sa distance à la caméra." -msgid "Vertical space between lines in multiline [Label3D]." -msgstr "" -"L'espacement vertical entre les lignes en mode multi-ligne d'un [Label3D]." - msgid "Text [Color] of the [Label3D]." msgstr "La [Color] du texte du [Label3D]." @@ -11016,6 +12579,9 @@ msgstr "" "alors que les objets transparents sont triés de l'arrière vers l'avant (et " "suivant leur priorité)." +msgid "Text outline size." +msgstr "Taille du contour du texte." + msgid "" "Sets the render priority for the text. Higher priority objects will be sorted " "in front of lower priority objects.\n" @@ -11223,9 +12789,15 @@ msgstr "Retourne la colonne de début de sélection." msgid "Returns the selection end column." msgstr "Retourne la colonne de fin de sélection." +msgid "Returns [code]true[/code] if a \"redo\" action is available." +msgstr "Retourne [code]true[/code] si une action « refaire » est disponible." + msgid "Returns [code]true[/code] if the user has selected text." msgstr "Retourne [code]true[/code] si l'utilisateur a sélectionné du texte." +msgid "Returns [code]true[/code] if an \"undo\" action is available." +msgstr "Retourne [code]true[/code] si une action « annuler » est disponible." + msgid "Executes a given action as defined in the [enum MenuItems] enum." msgstr "" "Exécute l'action donnée comme définit par l'énumération [enum MenuItems]." @@ -11252,8 +12824,12 @@ msgstr "" "Si [code]false[/code], il n'est pas possible de sélectionner le texte avec la " "souris ou le clavier." -msgid "If [code]false[/code], using shortcuts will be disabled." -msgstr "Si [code]false[/code], les raccourcis sont désactivés." +msgid "" +"If [code]true[/code], shortcut keys for context menu items are enabled, even " +"if the context menu is disabled." +msgstr "" +"Si [code]true[/code], les touches de raccourcies pour les éléments de menu " +"contextuel sont activées, même si le menu contextuel est désactivé." msgid "" "If [code]true[/code], the native virtual keyboard is shown when focused on " @@ -11265,10 +12841,6 @@ msgstr "" msgid "Emitted when the text changes." msgstr "Émis lorsque le texte change." -msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]." -msgstr "" -"Émis quand l'utilisateur presse [constant KEY_ENTER] dans le [LineEdit]." - msgid "Cuts (copies and clears) the selected text." msgstr "Coupe (copie puis efface) le texte sélectionné." @@ -11487,6 +13059,9 @@ msgstr "Les formes de fusion sont normalisées." msgid "Helper tool to access and edit [Mesh] data." msgstr "Un outil d'aide pour accéder et modifier les données des [Mesh]." +msgid "Using the MeshDataTool" +msgstr "Utiliser le MeshDataTool" + msgid "Clears all data currently in MeshDataTool." msgstr "Efface toutes les données actuellement dans le MeshDataTool." @@ -11739,6 +13314,36 @@ msgstr "" msgid "Generic mobile VR implementation." msgstr "Implémentation de RV mobile générique." +msgid "" +"This is a generic mobile VR implementation where you need to provide details " +"about the phone and HMD used. It does not rely on any existing framework. " +"This is the most basic interface we have. For the best effect, you need a " +"mobile phone with a gyroscope and accelerometer.\n" +"Note that even though there is no positional tracking, the camera will assume " +"the headset is at a height of 1.85 meters. You can change this by setting " +"[member eye_height].\n" +"You can initialize this interface as follows:\n" +"[codeblock]\n" +"var interface = XRServer.find_interface(\"Native mobile\")\n" +"if interface and interface.initialize():\n" +" get_viewport().use_xr = true\n" +"[/codeblock]" +msgstr "" +"Il s'agit d'une implémentation VR mobile générique où vous devez fournir des " +"détails sur le téléphone et le casque utilisés. Il ne repose sur aucune " +"bibliothèque existante. C'est l'interface la plus basique que nous avons. " +"Pour un meilleur résultat, vous avez besoin d'un téléphone mobile avec un " +"gyroscope et un accéléromètre intégrés.\n" +"Notez que même s'il n'y a pas de suivi de la position, la caméra suppose que " +"le casque est à une hauteur de 1.85 mètres. Vous pouvez changer cela en " +"définissant [member eye_height].\n" +"Vous pouvez initialiser cette interface ainsi :\n" +"[codeblock]\n" +"var interface = XRServer.find_interface(\"Native mobile\")\n" +"if interface and interface.initialize():\n" +" get_viewport().use_xr = true\n" +"[/codeblock]" + msgid "" "The distance between the display and the lenses inside of the device in " "centimeters." @@ -11749,6 +13354,13 @@ msgstr "" msgid "The width of the display in centimeters." msgstr "La largeur de l'écran en centimètres." +msgid "" +"The height at which the camera is placed in relation to the ground (i.e. " +"[XROrigin3D] node)." +msgstr "" +"La hauteur à laquelle la caméra est placée par rapport au sol (c'est-à-dire " +"au nœud [XROrigin3D])." + msgid "" "The interocular distance, also known as the interpupillary distance. The " "distance between the pupils of the left and right eye." @@ -11770,6 +13382,9 @@ msgstr "Le facteur k2 de lentille, voir k1." msgid "Using MultiMeshInstance" msgstr "Utilisation de MultiMeshInstance" +msgid "Optimization using MultiMeshes" +msgstr "Optimisation à l’aide de MultiMeshes" + msgid "Returns the custom data that has been set for a specific instance." msgstr "" "Retourne les données personnalisées qui ont été définies pour cette instance " @@ -11808,6 +13423,29 @@ msgstr "Le [MultiMesh] qui sera affiché par ce [MultiMeshInstance2D]." msgid "Node that instances a [MultiMesh]." msgstr "Le nœud qui instancie un [MultiMesh]." +msgid "Callback for [method MultiplayerAPI.get_peers]." +msgstr "Fonction de rappel pour [method MultiplayerAPI.get_peers]." + +msgid "Callback for [method MultiplayerAPI.get_remote_sender_id]." +msgstr "Fonction de rappel pour [method MultiplayerAPI.get_remote_sender_id]." + +msgid "Callback for [method MultiplayerAPI.get_unique_id]." +msgstr "Fonction de rappel pour [method MultiplayerAPI.get_unique_id]." + +msgid "Callback for [method MultiplayerAPI.object_configuration_add]." +msgstr "" +"Fonction de rappel pour [method MultiplayerAPI.object_configuration_add]." + +msgid "Callback for [method MultiplayerAPI.object_configuration_remove]." +msgstr "" +"Fonction de rappel pour [method MultiplayerAPI.object_configuration_remove]." + +msgid "Callback for [method MultiplayerAPI.poll]." +msgstr "Fonction de rappel pour [method MultiplayerAPI.poll]." + +msgid "Callback for [method MultiplayerAPI.rpc]." +msgstr "Fonction de rappel pour [method MultiplayerAPI.rpc]." + msgid "" "Returns the current state of the connection. See [enum ConnectionStatus]." msgstr "Retourne l'état actuel de la connexion. Voir [enum ConnexionStatus]." @@ -11815,6 +13453,12 @@ msgstr "Retourne l'état actuel de la connexion. Voir [enum ConnexionStatus]." msgid "Waits up to 1 second to receive a new network event." msgstr "Attend jusqu'à 1 seconde de recevoir un nouvel événement réseau." +msgid "The MultiplayerPeer is disconnected." +msgstr "Le MultiplayerPeer est déconnecté." + +msgid "This MultiplayerPeer is connected." +msgstr "Ce MultiplayerPeer est connecté." + msgid "" "Packets are not acknowledged, no resend attempts are made for lost packets. " "Packets may arrive in any order. Potentially faster than [constant " @@ -11909,6 +13553,22 @@ msgstr "" "devrait utiliser et met à jour le [code]agent[/code] sur le serveur de " "navigation." +msgid "" +"If [code]true[/code] the agent is registered for an RVO avoidance callback on " +"the [NavigationServer2D]. When [member velocity] is used and the processing " +"is completed a [code]safe_velocity[/code] Vector2 is received with a signal " +"connection to [signal velocity_computed]. Avoidance processing with many " +"registered agents has a significant performance cost and should only be " +"enabled on agents that currently require it." +msgstr "" +"Si [code]true[/code], l'agent est enregistré pour un rappel d'évitement RVO " +"sur le [Navigation2DServer]. Lorsque [method velocity] est utilisé et que le " +"traitement est terminé, un Vector2 [code]safe_velocity[/code] est reçu avec " +"une connexion au signal [signal velocity_computed]. Le traitement de " +"l'évitement avec de nombreux agents enregistrés a un coût de performance " +"important et ne devrait être activé que pour les agents qui en ont " +"actuellement besoin." + msgid "The maximum number of neighbors for the agent to consider." msgstr "Le nombre maximum de voisins à considérer par l'agent." @@ -11918,6 +13578,22 @@ msgstr "La vitesse maximale à laquelle un agent peut se déplacer." msgid "The distance to search for other agents." msgstr "La distance pour chercher d'autres agents." +msgid "" +"If [code]true[/code] the agent is registered for an RVO avoidance callback on " +"the [NavigationServer3D]. When [member velocity] is set and the processing is " +"completed a [code]safe_velocity[/code] Vector3 is received with a signal " +"connection to [signal velocity_computed]. Avoidance processing with many " +"registered agents has a significant performance cost and should only be " +"enabled on agents that currently require it." +msgstr "" +"Si [code]true[/code] l'agent est enregistré pour un rappel d'évitement RVO " +"sur le [NavigationServer3D]. Lorsque [method velocity] est utilisé et que le " +"traitement est terminé, un Vector3 [code]safe_velocity[/code] est reçu avec " +"une connexion du signal [signal velocity_computed]. Le traitement de " +"l'évitement avec de nombreux agents enregistrés a un coût de performance " +"important et ne devrait être activé que pour les agents qui en ont " +"actuellement besoin." + msgid "Using NavigationLinks" msgstr "Utilisation de NavigationLinks" @@ -12174,6 +13850,9 @@ msgstr "" msgid "Using NavigationRegions" msgstr "Utilisation de NavigationRegions" +msgid "Use [method get_rid] instead." +msgstr "Utilisez [method get_rid] à la place." + msgid "The [NavigationPolygon] resource to use." msgstr "La ressource [NavigationPolygon] à utiliser." @@ -12194,6 +13873,9 @@ msgstr "Utilisation de NavigationServer" msgid "Creates the agent." msgstr "Crée un agent." +msgid "Set the agent's [code]avoidance_layers[/code] bitmask." +msgstr "Définit le masque de bits du [code]avoidance_layers[/code] de l'agent." + msgid "Puts the agent in the map." msgstr "Place l'agent sur la carte." @@ -12240,13 +13922,6 @@ msgstr "" msgid "Create a new map." msgstr "Crée une nouvelle carte." -msgid "" -"Returns the owner region RID for the point returned by [method " -"map_get_closest_point]." -msgstr "" -"Retourne la région propriétaire du RID pour le point retourné par [method " -"map_get_closest_point]." - msgid "" "Returns the edge connection margin of the map. The edge connection margin is " "a distance used to connect two regions." @@ -12263,6 +13938,10 @@ msgstr "" "Définit la marge de connexion de bord de la carte utilisée pour fusionner les " "bords compatibles de la région." +msgid "Set the obstacles's [code]avoidance_layers[/code] bitmask." +msgstr "" +"Définit le masque de bits du [code]avoidance_layers[/code] de l'obstacle." + msgid "Creates a new region." msgstr "Crée une nouvelle région." @@ -12281,16 +13960,6 @@ msgstr "" "Émis quand une carte de navigation est mise à jour, ou quand une région se " "déplace ou est modifiée." -msgid "" -"Returns the normal for the point returned by [method map_get_closest_point]." -msgstr "" -"Retourne la normale pour le point retourné par [method map_get_closest_point]." - -msgid "" -"Returns the closest point between the navigation surface and the segment." -msgstr "" -"Retourne le point le plus proche de la surface de la navigation et du segment." - msgid "" "Returns the edge connection margin of the map. This distance is the minimum " "vertex distance needed to connect two edges from different regions." @@ -12418,6 +14087,82 @@ msgstr "" "lorsque le nœud a déjà quitté l'arborescence active, connectez-vous à [signal " "tree_exited]." +msgid "" +"Fetches a node. The [NodePath] can either be a relative path (from this " +"node), or an absolute path (from the [member SceneTree.root]) to a node. If " +"[param path] does not point to a valid node, generates an error and returns " +"[code]null[/code]. Attempts to access methods on the return value will result " +"in an [i]\"Attempt to call on a null instance.\"[/i] error.\n" +"[b]Note:[/b] Fetching by absolute path only works when the node is inside the " +"scene tree (see [method is_inside_tree]).\n" +"[b]Example:[/b] Assume this method is called from the Character node, inside " +"the following tree:\n" +"[codeblock lang=text]\n" +" ┖╴root\n" +" ┠╴Character (you are here!)\n" +" ┃ ┠╴Sword\n" +" ┃ ┖╴Backpack\n" +" ┃ ┖╴Dagger\n" +" ┠╴MyGame\n" +" ┖╴Swamp\n" +" ┠╴Alligator\n" +" ┠╴Mosquito\n" +" ┖╴Goblin\n" +"[/codeblock]\n" +"The following calls will return a valid node:\n" +"[codeblocks]\n" +"[gdscript]\n" +"get_node(\"Sword\")\n" +"get_node(\"Backpack/Dagger\")\n" +"get_node(\"../Swamp/Alligator\")\n" +"get_node(\"/root/MyGame\")\n" +"[/gdscript]\n" +"[csharp]\n" +"GetNode(\"Sword\");\n" +"GetNode(\"Backpack/Dagger\");\n" +"GetNode(\"../Swamp/Alligator\");\n" +"GetNode(\"/root/MyGame\");\n" +"[/csharp]\n" +"[/codeblocks]" +msgstr "" +"Récupère un nœud. Le [NodePath] peut être un chemin relatif (depuis le nœud " +"actuel) ou absolu (depuis le [member SceneTree.root]) vers un nœud. Si le " +"[param path] ne pointe pas vers un nœud valide, [code]null[/code] est renvoyé " +"et une erreur est générée. Appeler une méthode sur la valeur retournée si le " +"nœud n'existe pas lancera une erreur comme [i]\"Attempt to call on a " +"null instance.\"[/i].\n" +"[b]Note :[/b] Récupérer un nœud avec un chemin absolu ne fonctionne que si ce " +"nœud est dans l'arborescence (voir [method is_inside_tree]).\n" +"[b]Exemple :[/b] En assumant que le nœud actuel soit \"Personnage\" et que " +"l'arborescence soit la suivante :\n" +"[codeblock lang=text]\n" +" ┖╴root\n" +" ┠╴Personnage (vous êtes ici !)\n" +" ┃ ┠╴Épée\n" +" ┃ ┖╴Sac-à-dos\n" +" ┃ ┖╴Dague\n" +" ┠╴MonJeu\n" +" ┖╴Bassin\n" +" ┠╴Alligator\n" +" ┠╴Moustique\n" +" ┖╴Goblin\n" +"[/codeblock]\n" +"Les chemins possibles sont :\n" +"[codeblocks]\n" +"[gdscript]\n" +"get_node(\"Épée\")\n" +"get_node(\"Sac-à-dos/Dague\")\n" +"get_node(\"../Bassin/Alligator\")\n" +"get_node(\"/root/MonJeu\")\n" +"[/gdscript]\n" +"[csharp]\n" +"GetNode(\"Épée\");\n" +"GetNode(\"Sac-à-dos/Dague\");\n" +"GetNode(\"../Bassin/Alligator\");\n" +"GetNode(\"/root/MonJeu\");\n" +"[/csharp]\n" +"[/codeblocks]" + msgid "" "Returns [code]true[/code] if physics processing is enabled (see [method " "set_physics_process])." @@ -12466,6 +14211,35 @@ msgstr "" "Retourne [code]true[/code] si le nœud gère l'entrée de touche non traitée " "(voir [method set_process_unhandled_key_input)]." +msgid "" +"Prints the node and its children to the console, recursively. The node does " +"not have to be inside the tree. This method outputs [NodePath]s relative to " +"this node, and is good for copy/pasting into [method get_node]. See also " +"[method print_tree_pretty].\n" +"May print, for example:\n" +"[codeblock lang=text]\n" +".\n" +"Menu\n" +"Menu/Label\n" +"Menu/Camera2D\n" +"SplashScreen\n" +"SplashScreen/Camera2D\n" +"[/codeblock]" +msgstr "" +"Affiche le nœud et ses enfants dans la console, récursivement. Le nœud ne " +"doit pas forcément être à l'intérieur de l'arbre. Cette méthode produit des " +"[NodePath] relatifs à ce nœud, et est bon pour copier/coller dans [method " +"get_node]. Voir aussi [method print_tree_pretty].\n" +"Peut afficher, par exemple :\n" +"[codeblock lang=text]\n" +".\n" +"Menu\n" +"Menu/Label\n" +"Menu/Camera2D\n" +"SplashScreen\n" +"SplashScreen/Camera2D\n" +"[/codeblock]" + msgid "" "Emitted when the node enters the tree.\n" "This signal is emitted [i]after[/i] the related [constant " @@ -12475,6 +14249,17 @@ msgstr "" "Ce signal est émis [i]après[/i] la notification correspondante [constant " "NOTIFICATION_ENTER_TREE]." +msgid "" +"Notification received when the node is about to exit a [SceneTree]. See " +"[method _exit_tree].\n" +"This notification is received [i]after[/i] the related [signal tree_exiting] " +"signal." +msgstr "" +"La notification reçue quand le nœud va quitter le [SceneTree]. Voir [method " +"_exit_tree].\n" +"Cette notification est émise [i]après[/i] le signal [signal tree_exiting] " +"correspondant." + msgid "Notification received when the node is ready. See [method _ready]." msgstr "La notification reçue quand le nœud est prêt. Voir [method _ready]." @@ -12489,25 +14274,6 @@ msgstr "" msgid "Duplicate the node's groups." msgstr "Dupliquer les groupes du nœud." -msgid "" -"A 2D game object, inherited by all 2D-related nodes. Has a position, " -"rotation, scale, and Z index." -msgstr "" -"Un objet de jeu 2D, hérité de tous les nœuds 2D. A une position, une " -"rotation, une mise à l'échelle et un indice de profondeur Z." - -msgid "" -"A 2D game object, with a transform (position, rotation, and scale). All 2D " -"nodes, including physics objects and sprites, inherit from Node2D. Use Node2D " -"as a parent node to move, scale and rotate children in a 2D project. Also " -"gives control of the node's render order." -msgstr "" -"Un objet 2D de jeu, avec une transformation (position, rotation et mise à " -"l'échelle). Tous les nœuds 2D, y compris les objets de physique et les " -"sprites, héritent de Node2D. Utilisez Node2D comme nœud parent pour déplacer, " -"mettre à l'échelle et pivoter des enfants dans un projet 2D. donne également " -"le contrôle sur l'ordre de rendu des nœuds." - msgid "All 2D Demos" msgstr "Toutes les démos 2D" @@ -12520,24 +14286,6 @@ msgid "" msgstr "" "Applique une rotation au nœud, en radians, à partir de son actuelle rotation." -msgid "Global position." -msgstr "Position globale." - -msgid "Global rotation in radians." -msgstr "Rotation globale en radians." - -msgid "Global scale." -msgstr "L'échelle globale." - -msgid "Global [Transform2D]." -msgstr "[Transform2D] global." - -msgid "Position, relative to the node's parent." -msgstr "La position, relative au nœud parent." - -msgid "Local [Transform2D]." -msgstr "[Transform2D] locale." - msgid "Most basic 3D game object, parent of all 3D-related nodes." msgstr "L'objet 3D de jeu le plus basique, parent de tous les nœuds 3D." @@ -12645,6 +14393,9 @@ msgstr "" msgid "Emitted when node visibility changes." msgstr "Émis lorsque la visibilité du nœud change." +msgid "Constructs an empty [NodePath]." +msgstr "Construit un [NodePath] vide." + msgid "" "If [code]true[/code], the resulting texture contains a normal map created " "from the original noise interpreted as a bump map." @@ -12715,6 +14466,9 @@ msgstr "" msgid "Omnidirectional light, such as a light bulb or a candle." msgstr "Une lumière omnidirectionnelle, comme une ampoule ou une bougie." +msgid "See [enum ShadowMode]." +msgstr "Voir [enum ShadowMode]." + msgid "" "Shadows are rendered to a dual-paraboloid texture. Faster than [constant " "SHADOW_CUBE], but lower-quality." @@ -12722,12 +14476,110 @@ msgstr "" "Les ombres sont rendues dans une texture dual-paraboloïde. Plus rapide que " "[constant SHADOW_CUBE], mais de qualité inférieure." +msgid "An OpenXR action." +msgstr "Une action OpenXR." + +msgid "The type of action." +msgstr "Le type d'action." + msgid "Add an action set." msgstr "Ajouter un ensemble d'actions." msgid "Add an interaction profile." msgstr "Ajouter un profil d'interaction." +msgid "Remove an interaction profile." +msgstr "Supprime un profil d'interaction." + +msgid "XrResult documentation" +msgstr "Documentation d'XrResult" + +msgid "XrInstance documentation" +msgstr "Documentation d'XrInstance" + +msgid "XrSpace documentation" +msgstr "Documentation d'XrSpace" + +msgid "XrSession documentation" +msgstr "Documentation d'XrSession" + +msgid "XrSystemId documentation" +msgstr "Documentation d'XrSystemId" + +msgid "xrBeginSession documentation" +msgstr "Documentation d'xrBeginSession" + +msgid "XrPosef documentation" +msgstr "Documentation d'XrPosef" + +msgid "" +"Returns [code]true[/code] if OpenXR is initialized for rendering with an XR " +"viewport." +msgstr "" +"Renvoie [code]true[/code] si OpenXR est initialisé pour le rendu avec une " +"fenêtre d'affichage XR." + +msgid "Returns [code]true[/code] if OpenXR is initialized." +msgstr "Renvoie [code]true[/code] si OpenXR est initialisé." + +msgid "Returns [code]true[/code] if OpenXR is enabled." +msgstr "Renvoie [code]true[/code] si OpenXR est activé." + +msgid "Called before the OpenXR instance is created." +msgstr "Appelé avant que l'instance OpenXR soit créée." + +msgid "" +"Called when there is an OpenXR event to process. When implementing, return " +"[code]true[/code] if the event was handled, return [code]false[/code] " +"otherwise." +msgstr "" +"Appelé quand il y a un événement OpenXR à traiter. Lors de l'implémentation, " +"renvoyez [code]true[/code] si l'événement a été géré, renvoyez [code]false[/" +"code] autrement." + +msgid "Use [XRHandModifier3D] instead." +msgstr "Utilisez [XRHandModifier3D] à la place." + +msgid "Maximum supported hands." +msgstr "Nombre maximum de mains supportées." + +msgid "An OpenXR compliant skeleton." +msgstr "Un squelette compatible OpenXR." + +msgid "A [SkeletonProfileHumanoid] compliant skeleton." +msgstr "Un squelette compatible avec [SkeletonProfileHumanoid]." + +msgid "Our OpenXR interface." +msgstr "Notre interface OpenXR." + +msgid "Setting up XR" +msgstr "Configuration de la XR" + +msgid "" +"Returns [code]true[/code] if OpenXR's hand interaction profile is supported " +"and enabled.\n" +"[b]Note:[/b] This only returns a valid value after OpenXR has been " +"initialized." +msgstr "" +"Renvoie [code]true[/code] si le profil d'interaction de mains d'OpenXR est " +"pris en charge et activé.\n" +"[b]Note :[/b] Cela ne renvoie qu'une valeur valide qu'après que OpenXR a été " +"initialisé." + +msgid "" +"Returns [code]true[/code] if OpenXR's hand tracking is supported and " +"enabled.\n" +"[b]Note:[/b] This only returns a valid value after OpenXR has been " +"initialized." +msgstr "" +"Renvoie [code]true[/code] si le suivi de mains d'OpenXR est pris en charge et " +"activé.\n" +"[b]Note :[/b] Cela ne renvoie qu'une valeur valide qu'après que OpenXR a été " +"initialisé." + +msgid "Informs our OpenXR instance is exiting." +msgstr "Informe que notre instance OpenXR est en train de quitter." + msgid "Left hand." msgstr "Main gauche." @@ -12740,12 +14592,74 @@ msgstr "Articulation de la paume." msgid "Wrist joint." msgstr "Articulation du poignet." -msgid "" -"Generates and sets an optimized translation from the given [Translation] " -"resource." -msgstr "" -"Génère et définit des traductions optimisées depuis la ressource " -"[Translation] donnée." +msgid "Thumb metacarpal joint." +msgstr "Articulation métacarpienne du pouce." + +msgid "Thumb proximal joint." +msgstr "Articulation proximale du pouce." + +msgid "Thumb distal joint." +msgstr "Articulation distale du pouce." + +msgid "Thumb tip joint." +msgstr "Articulation du bout du pouce." + +msgid "Index metacarpal joint." +msgstr "L'articulation métacarpienne de l'index." + +msgid "Index proximal joint." +msgstr "L'articulation proximale de l'index." + +msgid "Index intermediate joint." +msgstr "L'articulation intermédiaire de l'index." + +msgid "Index distal joint." +msgstr "L'articulation distale de l'index." + +msgid "Index tip joint." +msgstr "L'articulation du bout de l'index." + +msgid "Middle metacarpal joint." +msgstr "L'articulation métacarpienne du majeur." + +msgid "Middle proximal joint." +msgstr "L'articulation proximale du majeur." + +msgid "Middle intermediate joint." +msgstr "L'articulation intermédiaire du majeur." + +msgid "Middle tip joint." +msgstr "L'articulation du bout du majeur." + +msgid "Ring metacarpal joint." +msgstr "L'articulation métacarpienne de l'annulaire." + +msgid "Ring proximal joint." +msgstr "L'articulation proximale de l'annulaire." + +msgid "Ring intermediate joint." +msgstr "L'articulation intermédiaire de l'annulaire." + +msgid "Ring distal joint." +msgstr "L'articulation distale de l'annulaire." + +msgid "Ring tip joint." +msgstr "L'articulation du bout de l'annulaire." + +msgid "Little metacarpal joint." +msgstr "L'articulation métacarpienne de l'auriculaire." + +msgid "Little proximal joint." +msgstr "L'articulation proximale de l'auriculaire." + +msgid "Little intermediate joint." +msgstr "L'articulation intermédiaire de l'auriculaire." + +msgid "Little distal joint." +msgstr "L'articulation distale de l'auriculaire." + +msgid "Little tip joint." +msgstr "L'articulation du bout de l'auriculaire." msgid "Clears all the items in the [OptionButton]." msgstr "Retire tous les éléments du [OptionButton]." @@ -12815,15 +14729,6 @@ msgstr "" "[b]Note :[/b] Les identifiants des Thread ne sont pas déterministes mais " "peuvent parfois être réutilisés même après des redémarrages de l'application." -msgid "" -"Returns the model name of the current device.\n" -"[b]Note:[/b] This method is implemented on Android and iOS. Returns " -"[code]\"GenericDevice\"[/code] on unsupported platforms." -msgstr "" -"Retourne le nom du modèle de l'appareil actuel.\n" -"[b]Note :[/b] Cette méthode est implémentée sur Android et iOS. Retourne " -"[code]\"GénériqueDevice\"[/code] sur les plateformes non supportées." - msgid "" "Returns the number of [i]logical[/i] CPU cores available on the host machine. " "On CPUs with HyperThreading enabled, this number will be greater than the " @@ -12845,6 +14750,9 @@ msgstr "" "[b]Note :[/b] Ces identifiants ne sont pas déterministes et peuvent être " "réutilisés durant plusieurs lancement de l'application." +msgid "Constructs an empty [PackedByteArray]." +msgstr "Construit un [PackedByteArray] vide." + msgid "" "Appends an element at the end of the array (alias of [method push_back])." msgstr "" @@ -12858,6 +14766,9 @@ msgstr "" "Efface le contenu du tableau. C'est équivalent à [method resize] avec une " "taille de [code]0[/code]." +msgid "Returns the number of times an element is in the array." +msgstr "Retourne le nombre de fois qu'un élément apparait dans le tableau." + msgid "Returns [code]true[/code] if the array is empty." msgstr "Retourne [code]true[/code] si le tableau est vide." @@ -12895,9 +14806,21 @@ msgstr "Ajoute une valeur à la fin du tableau." msgid "Changes the [Color] at the given index." msgstr "Change la [Color] à la position donnée." +msgid "Constructs an empty [PackedFloat32Array]." +msgstr "Construit un [PackedFloat32Array] vide." + msgid "Changes the float at the given index." msgstr "Change la flottant à la position donnée." +msgid "Constructs an empty [PackedFloat64Array]." +msgstr "Construit un [PackedFloat64Array] vide." + +msgid "Constructs an empty [PackedInt32Array]." +msgstr "Construit un [PackedInt32Array] vide." + +msgid "Constructs an empty [PackedInt64Array]." +msgstr "Construit un [PackedInt64Array] vide." + msgid "An abstraction of a serialized scene." msgstr "Une abstraction d'une scène sérialisée." @@ -12913,6 +14836,9 @@ msgstr "" "scène est instanciée pour être la base d'une autre.\n" "[b]Note :[/b] Seulement disponible dans les éditeurs." +msgid "Constructs an empty [PackedStringArray]." +msgstr "Construit un [PackedStringArray] vide." + msgid "Appends a string element at end of the array." msgstr "Ajoute une chaine de caractère à la fin du tableau." @@ -12936,6 +14862,9 @@ msgstr "Insère un [Vector2] à la fin." msgid "Changes the [Vector2] at the given index." msgstr "Change la [Vector2] à la position donnée." +msgid "Constructs an empty [PackedVector3Array]." +msgstr "Construit un [PackedVector3Array] vide." + msgid "Inserts a [Vector3] at the end." msgstr "Insère un [Vector3] à la fin." @@ -13070,6 +14999,9 @@ msgstr "" msgid "[Texture2D] to be applied to the [PanoramaSkyMaterial]." msgstr "La [Texture2D] à appliquer au [PanoramaSkyMaterial]." +msgid "2D Parallax" +msgstr "Parallaxe 2D" + msgid "The base position offset for all [ParallaxLayer] children." msgstr "" "Le décalage de la position de base pour tous les enfants du [ParallaxLayer]." @@ -13540,6 +15472,61 @@ msgstr "Le décalage appliqué à chaque sommet." msgid "The texture's rotation in radians." msgstr "La rotation de la texture en radians." +msgid "" +"[PopupMenu] is a modal window used to display a list of options. Useful for " +"toolbars and context menus.\n" +"The size of a [PopupMenu] can be limited by using [member Window.max_size]. " +"If the height of the list of items is larger than the maximum height of the " +"[PopupMenu], a [ScrollContainer] within the popup will allow the user to " +"scroll the contents. If no maximum size is set, or if it is set to [code]0[/" +"code], the [PopupMenu] height will be limited by its parent rect.\n" +"All [code]set_*[/code] methods allow negative item indices, i.e. [code]-1[/" +"code] to access the last item, [code]-2[/code] to select the second-to-last " +"item, and so on.\n" +"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports " +"searching within the list while the control is focused. Press a key that " +"matches the first letter of an item's name to select the first item starting " +"with the given letter. After that point, there are two ways to perform " +"incremental search: 1) Press the same key again before the timeout duration " +"to select the next item starting with the same letter. 2) Press letter keys " +"that match the rest of the word before the timeout duration to match to " +"select the item in question directly. Both of these actions will be reset to " +"the beginning of the list if the timeout duration has passed since the last " +"keystroke was registered. You can adjust the timeout duration by changing " +"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec].\n" +"[b]Note:[/b] The ID values used for items are limited to 32 bits, not full 64 " +"bits of [int]. This has a range of [code]-2^32[/code] to [code]2^32 - 1[/" +"code], i.e. [code]-2147483648[/code] to [code]2147483647[/code]." +msgstr "" +"[PopupMenu] est une fenêtre modale utilisée pour afficher une liste " +"d'options. Utile pour les barres d'outils et les menus contextuels.\n" +"La taille d'un [PopupMenu] peut être limitée en utilisant [membre Window." +"max_size]. Si la hauteur de la liste des éléments est supérieure à la hauteur " +"maximale du [PopupMenu], un [ScrollContainer] dans le popup permettra à " +"l'utilisateur de faire défiler le contenu. Si aucune taille maximale n'est " +"définie, ou si elle est définie à [code]0[/code], la hauteur de [PopupMenu] " +"sera limitée par son rect parent.\n" +"Toutes les méthodes [code]set_*[/code] permettent des indices d'éléments " +"négatifs, c'est-à-dire [code]-1[/code] pour accéder au dernier élément, " +"[code]-2[/code] pour sélectionner le deuxième élément, et ainsi de suite.\n" +"[b]Recherche incrémentale :[/b] Comme [ItemList] et [Tree], [PopupMenu] prend " +"en charge la recherche dans la liste pendant que le contrôle est en focus. " +"Appuyez sur une touche qui correspond à la première lettre du nom d'un " +"article pour sélectionner le premier élément à partir de la lettre donnée. " +"Après ce point, il y a deux façons d'effectuer la recherche incrémentale : 1) " +"Appuyez à nouveau sur la même touche avant la fin de la durée d'attente pour " +"sélectionner l'élément suivant en commençant par la même lettre. 2) Appuyez " +"sur les touches de lettre qui correspondent au reste du mot avant la fin de " +"la durée d'attente pour sélectionner l'élément en question directement. Ces " +"deux actions seront réinitialisées jusqu'au début de la liste si la durée " +"d'attente est passée depuis que la dernière frappe a été enregistrée. Vous " +"pouvez ajuster la durée d'expiration en changeant [membre ProjectSettings.gui/" +"timers/incremental_search_max_interval_msec].\n" +"[b]Note :[/b] Les valeurs d'identification utilisées pour les articles sont " +"limitées en 32 bits, pas les 64 bits de [int]. Il s'agit d'une plage de " +"[code]-2^32[/code] à [code]2^32 - 1[/code], c'est-à-dire [code]-2147483648[/" +"code] à [code]2147483647[/code]." + msgid "Same as [method add_icon_check_item], but uses a radio check button." msgstr "Pareil que [method add_icon_check_item], mais utilise un bouton radio." @@ -13655,6 +15642,9 @@ msgstr "Le style de l’arrière-plan." msgid "The style of the progress (i.e. the part that fills the bar)." msgstr "Le style de progression (c'est-à-dire la partie qui remplis la barre)." +msgid "Stores globally-accessible variables." +msgstr "Stocke les variables globales." + msgid "Clears the whole configuration (not recommended, may break things)." msgstr "" "Efface complètement la configuration (non recommandé, peut casser des choses)." @@ -13713,33 +15703,6 @@ msgstr "" "Activer [method set_restart_if_changed] [i]ne retarde pas[/i] l'affectation " "d'une valeur à un paramètre lorsqu'il est modifié." -msgid "" -"Sets the value of a setting.\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"ProjectSettings.set_setting(\"application/config/name\", \"Example\")\n" -"[/gdscript]\n" -"[csharp]\n" -"ProjectSettings.SetSetting(\"application/config/name\", \"Example\");\n" -"[/csharp]\n" -"[/codeblocks]\n" -"This can also be used to erase custom project settings. To do this change the " -"setting value to [code]null[/code]." -msgstr "" -"Définit la valeur d'un paramètre.\n" -"[b]Exemple :[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"ProjectSettings.set_setting(\"application/config/name\", \"Exemple\")\n" -"[/gdscript]\n" -"[csharp]\n" -"ProjectSettings.SetSetting(\"application/config/name\", \"Exemple\");\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Cela permet aussi de supprimer un paramètre personnalisé du projet : pour ce " -"faire, remplacez la valeur de ce dernier par [code]null[/code]." - msgid "Background color for the boot splash." msgstr "La couleur d'arrière plan pour l'écran de lancement." @@ -14505,31 +16468,19 @@ msgstr "" "Si [code]true[/code], utilise le modèle d'éclairage de matériaux Lambert plus " "rapide mais de qualité inférieure au modèle Burley." -msgid "Interpolates an [Object]'s property over time." -msgstr "Interpole une propriété d'un [Object] dans le temps." - msgid "" -"Makes the [PropertyTweener] use the current property value (i.e. at the time " -"of creating this [PropertyTweener]) as a starting point. This is equivalent " -"of using [method from] with the current value. These two calls will do the " -"same:\n" -"[codeblock]\n" -"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." -"from(position)\n" -"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." -"from_current()\n" -"[/codeblock]" +"If [code]true[/code], Godot will display an alert modal when OpenXR " +"initialization fails on startup." msgstr "" -"Fait que ce [PropertyTweener] utilisera la valeur de propriété actuelle " -"(c'est-à-dire au moment de créer ce [PropertyTweener]) comme point de départ. " -"Ceci est pareil que [method from] avec la valeur actuelle. Ces deux appels " -"sont identiques :\n" -"[codeblock]\n" -"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." -"from(position)\n" -"tween.tween_property(self, \"position\", Vector2(200, 100), 1)." -"from_current()\n" -"/[codeblock]" +"Si [code]true[/code], Godot affichera une alerte exclusive lorsque " +"l'initialisation OpenXR échoue au démarrage." + +msgid "If [code]true[/code], Godot will compile shaders required for XR." +msgstr "" +"Si [code]true[/code], Godot va compiler les shaders nécessaires pour la XR." + +msgid "Interpolates an [Object]'s property over time." +msgstr "Interpole une propriété d'un [Object] dans le temps." msgid "" "Sets the time in seconds after which the [PropertyTweener] will start " @@ -14538,6 +16489,12 @@ msgstr "" "Définit le délai en secondes avant que le [PropertyTweener] commence son " "interpolation. Par défaut, il n'y a pas de délai." +msgid "Online Quaternion Visualization" +msgstr "Visualisation en ligne de quaternion" + +msgid "Advanced Quaternion Visualization" +msgstr "Visualisation avancée de quaternions" + msgid "Stops the [Range] from sharing its member variables with any other." msgstr "Arrête le [Range] de partager ses variables membres avec les autres." @@ -14612,6 +16569,12 @@ msgstr "" "Le point de destination du rayon, par rapport à la [code]position[/code] du " "RayCast." +msgid "Attachment is unused." +msgstr "La pièce jointe est inutilisée." + +msgid "The texture type." +msgstr "Le type de texture." + msgid "Base class for reference-counted objects." msgstr "Classe de base pour les objets avec références comptées." @@ -14695,6 +16658,51 @@ msgstr "" "Si [code]true[/code], les coordonnées globales sont utilisées. Si " "[code]false[/code], ce sont les locales." +msgid "- Vulkan: [code]VkImage[/code]." +msgstr "- Vulkan : [code]VkImage[/code]." + +msgid "- Vulkan: [code]VkPipeline[/code]." +msgstr "- Vulkan : [code]VkPipeline[/code]." + +msgid "Use [constant DRIVER_RESOURCE_LOGICAL_DEVICE] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_LOGICAL_DEVICE] à la place." + +msgid "Use [constant DRIVER_RESOURCE_PHYSICAL_DEVICE] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_PHYSICAL_DEVICE] à la place." + +msgid "Use [constant DRIVER_RESOURCE_TOPMOST_OBJECT] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_TOPMOST_OBJECT] à la place." + +msgid "Use [constant DRIVER_RESOURCE_COMMAND_QUEUE] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_COMMAND_QUEUE] à la place." + +msgid "Use [constant DRIVER_RESOURCE_QUEUE_FAMILY] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_QUEUE_FAMILY] à la place." + +msgid "Use [constant DRIVER_RESOURCE_TEXTURE] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_TEXTURE] à la place." + +msgid "Use [constant DRIVER_RESOURCE_TEXTURE_VIEW] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_TEXTURE_VIEW] à la place." + +msgid "Use [constant DRIVER_RESOURCE_TEXTURE_DATA_FORMAT] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_TEXTURE_DATA_FORMAT] à la place." + +msgid "Use [constant DRIVER_RESOURCE_SAMPLER] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_SAMPLER] à la place." + +msgid "Use [constant DRIVER_RESOURCE_UNIFORM_SET] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_UNIFORM_SET] à la place." + +msgid "Use [constant DRIVER_RESOURCE_BUFFER] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_BUFFER] à la place." + +msgid "Use [constant DRIVER_RESOURCE_COMPUTE_PIPELINE] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_COMPUTE_PIPELINE] à la place." + +msgid "Use [constant DRIVER_RESOURCE_RENDER_PIPELINE] instead." +msgstr "Utilisez [constant DRIVER_RESOURCE_RENDER_PIPELINE] à la place." + msgid "1-dimensional texture." msgstr "Texture à 1 dimension" @@ -14707,15 +16715,63 @@ msgstr "Texture à 3 dimensions." msgid "[Cubemap] texture." msgstr "Texture [Cubemap]." +msgid "Array of [Cubemap] textures." +msgstr "Tableau de textures [Cubemap]." + +msgid "Sample the alpha channel." +msgstr "Échantillonne le canal alpha." + +msgid "Sample with repeating enabled." +msgstr "Échantillonne avec la répétition activée." + msgid "Texture uniform." msgstr "Texture uniforme." +msgid "\"Less than\" comparison." +msgstr "Comparaison \"Moins que\"." + msgid "\"Equal\" comparison." msgstr "Comparaison \"égale\"." +msgid "\"Greater than\" comparison." +msgstr "Comparaison \"Plus que\"." + +msgid "\"Not equal\" comparison." +msgstr "Comparaison \"Inégal\"." + +msgid "OR logic operation." +msgstr "Opération logique OR." + +msgid "Not-OR (NOR) logic operation." +msgstr "Opération logique non-OU (NOR)." + +msgid "Not-XOR (XNOR) logic operation." +msgstr "Opération logique non-OU exclusif (XNOR)." + +msgid "Invert logic operation." +msgstr "Opération logique d'inverse." + +msgid "Not-AND (NAND) logic operation." +msgstr "Opération logique non-ET (NAND)." + +msgid "Constant [code]1.0[/code] blend factor." +msgstr "Facteur de mélange constant [code]1.0[/code]." + +msgid "Boolean specialization constant." +msgstr "Constante de spécialisation de booléen." + +msgid "Integer specialization constant." +msgstr "Constante de spécialisation d'entier." + +msgid "Memory taken by buffers." +msgstr "Mémoire prise par les tampons." + msgid "Server for anything visible." msgstr "Serveur pour tout ce qui est visible." +msgid "Optimization using Servers" +msgstr "Optimisation à l'aide de serveurs" + msgid "" "Sets camera to use orthogonal projection, also known as orthographic " "projection. Objects remain the same size on the screen no matter how far away " @@ -14731,6 +16787,12 @@ msgstr "" "Utilise la perspective comme projection pour la caméra. Ainsi, les objets " "affichés apparaissent plus petits quand ils sont plus éloignés." +msgid "See also [method CanvasItem.draw_lcd_texture_rect_region]." +msgstr "Voir aussi [method CanvasItem.draw_lcd_texture_rect_region]." + +msgid "See also [method CanvasItem.draw_msdf_texture_rect_region]." +msgstr "Voir aussi [method CanvasItem.draw_msdf_texture_rect_region]." + msgid "Clears the [CanvasItem] and removes all commands in it." msgstr "Efface le [CanvasItem] et enlève toutes les commandes." @@ -14952,6 +17014,13 @@ msgstr "" "Si [code]true[/code], la fenêtre d'affichage rend son arrière-plan de manière " "transparente." +msgid "" +"If [code]true[/code], the viewport uses augmented or virtual reality " +"technologies. See [XRInterface]." +msgstr "" +"Si [code]true[/code], la fenêtre d'affichage utilise la réalité augmentée ou " +"virtuelle. Voir [XRInterface]." + msgid "Number of weights/bones per vertex." msgstr "Nombre de poids / os par sommet." @@ -15009,6 +17078,12 @@ msgstr "Représente la taille de l'énumération [enum PrimitiveType]." msgid "Use [Transform2D] to store MultiMesh transform." msgstr "Utiliser [Transform2D] pour stocker la transformation des MultiMesh." +msgid "Omni light (see [OmniLight3D])." +msgstr "Lumière omni (voir [OmniLight3D])." + +msgid "Spot light (see [SpotLight3D])." +msgstr "Lumière de spot (voir [SpotLight3D])." + msgid "The light's influence on specularity." msgstr "L’influence de la lumière sur la spécularité." @@ -15081,9 +17156,6 @@ msgstr "L'affichage de débogage est désactivé. C'est la valeur par défaut." msgid "Objects are displayed without light information." msgstr "Les objets sont affichés sans les informations de lumière." -msgid "Debug draw draws objects in wireframe." -msgstr "L'affichage de débogage est en fil de fer." - msgid "Use the clear color as background." msgstr "Utiliser la couleur d'effacement pour l'arrière-plan." @@ -15103,6 +17175,9 @@ msgstr "" msgid "Represents the size of the [enum EnvironmentBG] enum." msgstr "Représente la taille de l'énumération [enum EnvironmentBG]." +msgid "Disable ambient light." +msgstr "Désactiver la lumière ambiante." + msgid "Disable reflections." msgstr "Désactive les réflexions." @@ -15198,6 +17273,18 @@ msgstr "" msgid "The default import order." msgstr "L'ordre d'importation par défaut." +msgid "Imports comma-separated values" +msgstr "Importe des valeurs séparées par des virgules" + +msgid "Importing translations" +msgstr "Importer des traductions" + +msgid "Importing audio samples" +msgstr "Importer des échantillons audio" + +msgid "Importing 3D scenes" +msgstr "Importer des scènes 3D" + msgid "Returns the list of recognized extensions for a resource type." msgstr "Retourne la liste des extensions reconnues pour ce type de ressource." @@ -15239,6 +17326,9 @@ msgstr "" "Ne sauvegarde pas les méta-données spécifiques à l'éditeur (commençant par " "[code]__editor[/code])." +msgid "RichTextEffect test project (third-party)" +msgstr "Projet d'essai RichTextEffect (tierce-partie)" + msgid "Adds raw non-BBCode-parsed text to the tag stack." msgstr "" "Ajoute du texte BBCode brut (non interprété) dans le pile des marqueurs." @@ -15266,13 +17356,6 @@ msgstr "" msgid "If [code]true[/code], the label allows text selection." msgstr "Si [code]true[/code], le label autorise la sélection du texte." -msgid "" -"If [code]true[/code], shortcut keys for context menu items are enabled, even " -"if the context menu is disabled." -msgstr "" -"Si [code]true[/code], les touches de raccourcies pour les éléments de menu " -"contextuel sont activées, même si le menu contextuel est désactivé." - msgid "Triggers when the mouse exits a meta tag." msgstr "Se déclenche lorsque la souris sort d'une méta-marqueur." @@ -15297,9 +17380,6 @@ msgstr "La couleur de l'ombre de la police." msgid "The color of the selection box." msgstr "La couleur de la boîte de sélection." -msgid "The vertical space between lines." -msgstr "L'espace vertical entre les lignes." - msgid "The horizontal offset of the font's shadow." msgstr "Le décalage horizontal pour l'ombre de la police." @@ -15336,6 +17416,9 @@ msgstr "La taille de cellule de la grille en unités 3D." msgid "The grid's color." msgstr "La couleur de la grille." +msgid "Use [method property_get_replication_mode] instead." +msgstr "Utilisez [method property_get_replication_mode] à la place." + msgid "SceneTree" msgstr "SceneTree" @@ -15351,6 +17434,9 @@ msgstr "Émis quand le minuteur atteint 0." msgid "A class stored as a resource." msgstr "Une classe stockée en tant que ressource." +msgid "Scripting documentation index" +msgstr "Index de documentation du scripting" + msgid "Returns the script directly inherited by this script." msgstr "Retourne le script directement hérité par ce script." @@ -15611,19 +17697,6 @@ msgstr "" "Limite la valeur [member split_offset] pour rester dans l'intervalle défini " "entre les valeurs minimale et maximale actuellement possibles." -msgid "" -"If [code]true[/code], the area of the first [Control] will be collapsed and " -"the dragger will be disabled." -msgstr "" -"Si [code]true[/code], le premier [Control] sera masqué et le glisseur " -"désactivé." - -msgid "" -"Determines the dragger's visibility. See [enum DraggerVisibility] for details." -msgstr "" -"Détermine la visibilité du dragueur. Voir [enum DraggerVisibility] pour plus " -"de détails." - msgid "" "The initial offset of the splitting between the two [Control]s, with [code]0[/" "code] being at the end of the first [Control]." @@ -15634,24 +17707,6 @@ msgstr "" msgid "Emitted when the dragger is dragged by user." msgstr "Émis lorsque le dragueur est glissé par l'utilisateur." -msgid "The split dragger is visible when the cursor hovers it." -msgstr "Le dragueur fractionné est visible quand le curseur le survole." - -msgid "The split dragger is never visible." -msgstr "Le dragueur fractionné n’est jamais visible." - -msgid "" -"Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically " -"when it isn't under the cursor. If 0 ([code]false[/code]), it's always " -"visible." -msgstr "" -"Une valeur booléenne. Si 1 ([code]true[/code]), le glisseur sera " -"automatiquement masqué quand il n'est pas sous le curseur. Si 0 ([code]false[/" -"code]), il sera toujours visible." - -msgid "The space between sides of the container." -msgstr "L'espace entre les côtés des conteneurs." - msgid "The icon used for the grabber drawn in the middle area." msgstr "L'icône utilisée pour le glisseur affiché au milieu." @@ -15794,6 +17849,9 @@ msgstr "" "Retourne un tableau contenant les noms associés à chaque animation. Ces " "valeurs sont triées dans l'ordre alphabétique." +msgid "Status indicator icon." +msgstr "Icône d'indicateur de statut." + msgid "Gets a signed byte from the stream." msgstr "Récupérer un octet signé depuis le flux." @@ -15921,6 +17979,9 @@ msgstr "" "[method StreamPeer.get_available_bytes] pour que ça puisse fonctionner " "correctement." +msgid "GDScript format strings" +msgstr "Chaines de format GDScript" + msgid "" "Returns a copy of the string with special characters escaped using the C " "language standard." @@ -15936,6 +17997,36 @@ msgstr "" "tabulations et les espaces) retirée. Voir aussi [method indent] pour ajouter " "une indentation." +msgid "" +"Returns the [url=https://en.wikipedia.org/wiki/SHA-2]SHA-256[/url] hash of " +"the string as a [PackedByteArray]." +msgstr "" +"Renvoie le hash [url=https://fr.wikipedia.org/wiki/SHA-2]SHA-256[/url] de la " +"chaîne de caractères en [PackedByteArray]." + +msgid "" +"Returns the [url=https://en.wikipedia.org/wiki/SHA-2]SHA-256[/url] hash of " +"the string as another [String]." +msgstr "" +"Renvoie le hash [url=https://fr.wikipedia.org/wiki/SHA-2]SHA-256[/url] de la " +"chaîne de caractères en [String]." + +msgid "Returns the string converted to [code]camelCase[/code]." +msgstr "Retourne la chaîne de caractères convertie en [code]camelCase[/code]." + +msgid "Returns the string converted to [code]lowercase[/code]." +msgstr "" +"Retourne la chaîne de caractères convertie en [code]lowercase[/code] " +"(minuscules)." + +msgid "Returns the string converted to [code]PascalCase[/code]." +msgstr "Retourne la chaîne de caractères convertie en [code]PascalCase[/code]." + +msgid "Returns the string converted to [code]UPPERCASE[/code]." +msgstr "" +"Retourne la chaîne de caractères convertie en [code]UPPERCASE[/code] " +"(majuscules)." + msgid "" "Returns a copy of the string with escaped characters replaced by their " "meanings according to the XML standard." @@ -16288,6 +18379,9 @@ msgstr "Met toujours à jour la cible de rendu." msgid "Helper tool to create geometry." msgstr "Un outil d'aide pour créer du géométrie." +msgid "Using the SurfaceTool" +msgstr "Utiliser le SurfaceTool" + msgid "" "Specifies the position of current vertex. Should be called after specifying " "other vertex properties (e.g. Color, UV)." @@ -16648,12 +18742,6 @@ msgstr "Désélectionne la sélection actuelle." msgid "Returns the text of a specific line." msgstr "Retourne le texte pour la ligne renseignée." -msgid "Returns [code]true[/code] if a \"redo\" action is available." -msgstr "Retourne [code]true[/code] si une action « refaire » est disponible." - -msgid "Returns [code]true[/code] if an \"undo\" action is available." -msgstr "Retourne [code]true[/code] si une action « annuler » est disponible." - msgid "Perform redo operation." msgstr "Effectue une opération refaire." @@ -16735,6 +18823,9 @@ msgstr "Sélectionne l'ensemble du texte [TextEdit]." msgid "Redoes the previous action." msgstr "Refait l’action précédente." +msgid "A typing action." +msgstr "Action de saisie." + msgid "Match case when searching." msgstr "Respecte la casse lors de la recherche." @@ -16763,9 +18854,6 @@ msgstr "" "Définir la [Color] de surlignage des multiples occurrences. [member " "highlight_all_occurrences] doit être actif." -msgid "Sets the spacing between the lines." -msgstr "Définit l'espacement entre les lignes." - msgid "Sets the default [Font]." msgstr "Définit la [Font] par défaut." @@ -16784,15 +18872,100 @@ msgstr "La taille d'un des pixels du texte pour définir sa taille en 3D." msgid "Removes dropcap." msgstr "Enlève la lettrine." +msgid "Paragraph horizontal alignment." +msgstr "Alignement horizontal de paragraphe." + msgid "Paragraph width." msgstr "Largeur du paragraphe." +msgid "Returns font anti-aliasing mode." +msgstr "Renvoie le mode d'anticrénelage de la police." + +msgid "Returns text orientation." +msgstr "Renvoie l'orientation du texte." + msgid "Use the light font hinting mode." msgstr "Utilise le mode d'indice de police légère." msgid "Spacing for the space character." msgstr "L'espacement pour le caractère d'espace." +msgid "Font is bold." +msgstr "La police est en gras." + +msgid "" +"[b]Optional.[/b]\n" +"Returns font anti-aliasing mode." +msgstr "" +"[b]Optionnel.[/b]\n" +"Retourne le mode d'anticrénelage de la police." + +msgid "" +"[b]Required.[/b]\n" +"Returns bitmap font fixed size." +msgstr "" +"[b]Nécessaire[/b]\n" +"Retourne la taille fixe de la police matricielle." + +msgid "" +"[b]Required.[/b]\n" +"Returns bitmap font scaling mode." +msgstr "" +"[b]Nécessaire.[/b]\n" +"Renvoie le mode d'échelle de la police matricielle." + +msgid "" +"[b]Optional.[/b]\n" +"Returns font family name." +msgstr "" +"[b]Optionnel.[/b]\n" +"Renvoie le nom de famille de la police." + +msgid "" +"[b]Optional.[/b]\n" +"Returns font style name." +msgstr "" +"[b]Optionnel.[/b]\n" +"Renvoie le nom de style de la police." + +msgid "" +"[b]Optional.[/b]\n" +"Remove language support override." +msgstr "" +"[b]Optionnel.[/b]\n" +"Retire la redéfinition du support de langue." + +msgid "" +"[b]Optional.[/b]\n" +"Removes script support override." +msgstr "" +"[b]Optionnel.[/b]\n" +"Supprime la redéfinition du support de script." + +msgid "" +"[b]Optional.[/b]\n" +"Sets font anti-aliasing mode." +msgstr "" +"[b]Optionnel.[/b]\n" +"Définit le mode d'anticrénelage de la police." + +msgid "" +"[b]Required.[/b]\n" +"Returns text span metadata." +msgstr "" +"[b]Nécessaire.[/b]\n" +"Renvoie les métadonnées de largeur du texte." + +msgid "" +"[b]Optional.[/b]\n" +"Returns text orientation." +msgstr "" +"[b]Optionnel.[/b]\n" +"Retourne l'orientation du texte." + +msgid "Registers a [TextServer] interface." +msgstr "Enregistre une interface [TextServer]." + msgid "Emitted when a new interface has been added." msgstr "Émis lorsqu'une nouvelle interface a été ajoutée." @@ -16808,24 +18981,6 @@ msgstr "" "Un bouton affiché avec une Texture. Supporte les états appuyé, survolé, " "désactivé, et avec le focus." -msgid "" -"[TextureButton] has the same functionality as [Button], except it uses " -"sprites instead of Godot's [Theme] resource. It is faster to create, but it " -"doesn't support localization like more complex [Control]s.\n" -"The \"normal\" state must contain a texture ([member texture_normal]); other " -"textures are optional.\n" -"See also [BaseButton] which contains common properties and methods associated " -"with this node." -msgstr "" -"Le [TextureButton] a les même fonctionnalités qu'un [Button], seulement qu'il " -"utilise une images plutôt qu'une ressource [Theme]. Il est plus rapide à " -"créer, mais ne supporte pas la localisation comme certains [Control] plus " -"complexes.\n" -"L'état \"normal\" doit contenir une texture ([member texture_normal]) ; les " -"textures des autres états sont facultatives.\n" -"Voir aussi [BaseButton] qui contient les propriétés et méthodes communes à " -"tous les types de bouton." - msgid "" "Pure black and white [BitMap] image to use for click detection. On the mask, " "white pixels represent the button's clickable area. Use it to create buttons " @@ -16835,25 +18990,6 @@ msgstr "" "Sur le masque, les pixels blancs représentent la zone cliquable du bouton. " "Utilisez-le pour créer des boutons avec des formes courbes." -msgid "" -"Texture to display when the node is disabled. See [member BaseButton." -"disabled]." -msgstr "" -"Texture à afficher lorsque le nœud est désactivé. Voir [member BaseButton." -"disabled]." - -msgid "Texture to display when the mouse hovers the node." -msgstr "Texture à afficher lorsque la souris survole le nœud." - -msgid "" -"Texture to display on mouse down over the node, if the node has keyboard " -"focus and the player presses the Enter key or if the player presses the " -"[member BaseButton.shortcut] key." -msgstr "" -"La texture à afficher quand la souris appuie sur le nœud, si quand le nœud a " -"le focus du clavier et que l'utilisateur appuie sur la touche Entrée, ou " -"quand l'utilisateur appuie sur la touche [member BaseButton.shortcut]." - msgid "Scale to fit the node's bounding rectangle." msgstr "Change l'échelle pour adapter le rectangle total du nœud." @@ -16900,6 +19036,9 @@ msgstr "" msgid "GUI skinning" msgstr "Apparence GUI" +msgid "Using the theme editor" +msgstr "Utiliser l'éditeur de thème" + msgid "Theme's [Color] item type." msgstr "Le type de l'élément [Color] du thème." @@ -16948,6 +19087,9 @@ msgstr "Toujours montrer." msgid "Tile library for tilemaps." msgstr "La bibliothèque des tuiles pour les cartes." +msgid "Hexagonal tile shape." +msgstr "Forme de tuile hexagonale." + msgid "Horizontal half-offset." msgstr "Demi-décalage horizontal." @@ -17104,12 +19246,6 @@ msgstr "Retourne tous les messages (clés)." msgid "The locale of the translation." msgstr "La langue de la traduction." -msgid "Adds a [Translation] resource." -msgstr "Ajoute une ressource [Translation]." - -msgid "Clears the server from all translations." -msgstr "Efface le serveur de toutes les traductions." - msgid "" "Returns the current locale of the project.\n" "See also [method OS.get_locale] and [method OS.get_locale_language] to query " @@ -17126,9 +19262,6 @@ msgstr "" "Retourne la langue de la locale et sa variation (ex. [code]\"fr_FR\"[/code] " "retournera [code]\"Français (France)\"[/code])." -msgid "Removes the given translation from the server." -msgstr "Retire la translation donnée du serveur." - msgid "Clears the tree. This removes all items." msgstr "Efface l'arborescence. Cela retire tous les éléments." @@ -17226,6 +19359,9 @@ msgstr "" "La [Color] du texte pour le mode de cellule [constant TreeItem." "CELL_MODE_CUSTOM] quand survolé." +msgid "Text [Color] used when the item is selected." +msgstr "La [Color] du texte utilisée quand l'élément est sélectionné." + msgid "[Color] of the guideline." msgstr "[Color] de la ligne directrice." @@ -17306,23 +19442,6 @@ msgstr "Retourne [code]true[/code] si [code]expand_right[/code] est défini." msgid "Returns the [Color] modulating the column's icon." msgstr "Retourne la [Color] modulant l'icône de la colonne." -msgid "" -"Returns the next sibling TreeItem in the tree or a null object if there is " -"none." -msgstr "" -"Retourne le TreeItem suivant dans l'arborescence, ou l'objet null s'il n'y en " -"a pas." - -msgid "Returns the parent TreeItem or a null object if there is none." -msgstr "Renvoie le TreeItem parent ou un objet nul s’il n’y en a pas." - -msgid "" -"Returns the previous sibling TreeItem in the tree or a null object if there " -"is none." -msgstr "" -"Retourne le TreeItem précédent dans l'arborescence, ou l'objet null s'il n'y " -"en a pas." - msgid "Returns the value of a [constant CELL_MODE_RANGE] column." msgstr "Retourne la valeur d'une colonne [constant CELL_MODE_RANGE]." @@ -17345,6 +19464,9 @@ msgstr "Retourne l'alignement du texte de la colonne donnée." msgid "Sets the given column's custom color." msgstr "Définit la couleur personnalisée de la colonne donnée." +msgid "Use [method TreeItem.set_custom_draw_callback] instead." +msgstr "Utilisez [method TreeItem.set_custom_draw_callback] à la place." + msgid "" "Sets the metadata value for the given column, which can be retrieved later " "using [method get_metadata]. This can be used, for example, to store a " @@ -17451,9 +19573,6 @@ msgstr "" "Une combinaison de [constant EASE_IN] et de [constant EASE_OUT]. " "L'interpolation est plus rapide au début et à la fin." -msgid "Emitted when the [Tweener] has just finished its job." -msgstr "Émis quand le [Tweener] a terminé son interpolation." - msgid "Helper class to implement a UDP server." msgstr "Une classe d'aide pour implémenter un serveur UDP." @@ -17755,6 +19874,29 @@ msgstr "Erreur d’allocation de mémoire." msgid "The most important data type in Godot." msgstr "Le plus important type de donnée dans Godot." +msgid "" +"A 2-element structure that can be used to represent 2D coordinates or any " +"other pair of numeric values.\n" +"It uses floating-point coordinates. By default, these floating-point values " +"use 32-bit precision, unlike [float] which is always 64-bit. If double " +"precision is needed, compile the engine with the option " +"[code]precision=double[/code].\n" +"See [Vector2i] for its integer counterpart.\n" +"[b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/" +"code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will " +"always evaluate to [code]true[/code]." +msgstr "" +"Une structure de 2 éléments qui peut être utilisée pour représenter les " +"coordonnées 2D ou toute autre paire de valeurs numériques.\n" +"Il utilise des coordonnées flottantes. Par défaut, ces valeurs flottantes " +"utilisent une précision de 32 bits, contrairement à [float] qui est toujours " +"de 64 bits. Si une double précision est nécessaire, compilez le moteur avec " +"l'option [code]précision=double[/code].\n" +"Voir [Vector2i] pour son homologue entier.\n" +"[b]Note :[/b] Dans un contexte booléen, un Vector2 évaluera [code]false[/" +"code] s'il est égal à [code]Vector2(0, 0)[/code]. Sinon, un Vector2 évaluera " +"toujours [code]true[/code]." + msgid "3Blue1Brown Essence of Linear Algebra" msgstr "3Blue1Brown Essence of Linear Algebra" @@ -17854,6 +19996,28 @@ msgstr "" "Le vecteur unitaire vers le bas. Y représente le bas en 2D, donc ce vecteur " "pointe vers +Y." +msgid "" +"A 2-element structure that can be used to represent 2D grid coordinates or " +"any other pair of integers.\n" +"It uses integer coordinates and is therefore preferable to [Vector2] when " +"exact precision is required. Note that the values are limited to 32 bits, and " +"unlike [Vector2] this cannot be configured with an engine build option. Use " +"[int] or [PackedInt64Array] if 64-bit values are needed.\n" +"[b]Note:[/b] In a boolean context, a Vector2i will evaluate to [code]false[/" +"code] if it's equal to [code]Vector2i(0, 0)[/code]. Otherwise, a Vector2i " +"will always evaluate to [code]true[/code]." +msgstr "" +"Une structure de 2 éléments qui peut être utilisée pour représenter les " +"coordonnées d'une grille 2D ou toute autre paire d'entiers.\n" +"Il utilise des coordonnées entières et est donc préférable à [Vector2] " +"lorsque la précision exacte est requise. Notez que les valeurs sont limitées " +"à 32 bits, et contrairement à [Vector2] cela ne peut pas être configuré avec " +"une option de compilation du moteur. Utilisez [int] ou [PackedInt64Array] si " +"des valeurs 64 bits sont nécessaires.\n" +"[b]Note :[/b] Dans un contexte booléen, un Vector2i évaluera [code]false[/" +"code] si elle est égale à [code]Vector2i(0, 0)[/code]. Sinon, un Vector2i " +"évaluera toujours [code]true[/code]." + msgid "Returns the unsigned minimum angle to the given vector, in radians." msgstr "Retourne l'angle non signé minimum avec le vecteur donné, en radians." @@ -17905,16 +20069,6 @@ msgid "Returns [code]true[/code] if this wheel is in contact with a surface." msgstr "" "Retourne [code]true[/code] si cette roue est en contact avec une surface." -msgid "" -"This value defines the stiffness of the suspension. Use a value lower than 50 " -"for an off-road car, a value between 50 and 100 for a race car and try " -"something around 200 for something like a Formula 1 car." -msgstr "" -"Cette valeur définit la rigidité de la suspension. Utilisez une valeur " -"inférieure à 50 pour une voiture tout terrain, une valeur entre 50 et 100 " -"pour une voiture de course et essayez quelque chose autour de 200 pour " -"quelque chose comme une voiture de Formule 1." - msgid "" "This is the distance the suspension can travel. As Godot units are equivalent " "to meters, keep this setting relatively low. Try a value between 0.1 and 0.3 " @@ -18024,17 +20178,8 @@ msgstr "" msgid "Returns [code]true[/code] if the drag operation is successful." msgstr "Retourne [code]true[/code] si l'opération de déposer-glisser a réussi." -msgid "" -"Returns [code]true[/code] if the viewport is currently performing a drag " -"operation.\n" -"Alternative to [constant Node.NOTIFICATION_DRAG_BEGIN] and [constant Node." -"NOTIFICATION_DRAG_END] when you prefer polling the value." -msgstr "" -"Retourne [code]true[/code] si la fenêtre d'affichage effectue actuellement " -"une opération de déposé-glissé.\n" -"C'est une alternative à [constant Node. NOTIFICATION_DRAG_BEGIN] and " -"[constant Node. NOTIFICATION_DRAG_END] lorsque vous préférez récupérer " -"directement la valeur." +msgid "Use [method push_input] instead." +msgstr "Utilisez [method push_input] à la place." msgid "If [code]true[/code], the viewport will process 2D audio streams." msgstr "Si [code]true[/code], la fenêtre d'affichage gèrera les flux audio 2D." @@ -18135,6 +20280,12 @@ msgstr "Représente la taille de l'énumération [enum RenderInfo]." msgid "Objects are displayed normally." msgstr "Les objets sont affichés normalement." +msgid "Corresponds to [constant Node.PROCESS_MODE_INHERIT]." +msgstr "Correspond à [constant Node. PROCESS_MODE_INHERIT]." + +msgid "Corresponds to [constant Node.PROCESS_MODE_ALWAYS]." +msgstr "Correspond à [constant Node. PROCESS_MODE_ALWAYS]." + msgid "Corresponds to [constant Node.PROCESS_MODE_WHEN_PAUSED]." msgstr "Correspond à [constant Node.PROCESS_MODE_WHEN_PAUSED]." @@ -18219,9 +20370,18 @@ msgstr "Limite une valeur aux bornes [code]min[/code] et [code]max[/code]." msgid "A floating-point scalar." msgstr "Un scalaire à virgule flottante." +msgid "An integer scalar." +msgstr "Un scalaire entier." + +msgid "An unsigned integer scalar." +msgstr "Un scalaire entier non signé." + msgid "A 3D vector type." msgstr "Un type de vecteur 3D." +msgid "A 4D vector type." +msgstr "Un type de vecteur 4D." + msgid "A [Color] constant to be used within the visual shader graph." msgstr "Une [Color] constante à utiliser dans le shader visuel du graphe." @@ -18351,20 +20511,6 @@ msgstr "La comparaison pour l'égalité ([code]a == b[/code])." msgid "Comparison for inequality ([code]a != b[/code])." msgstr "La comparaison pour l'égalité ([code]a != b[/code])." -msgid "" -"The result will be true if all of component in vector satisfy the comparison " -"condition." -msgstr "" -"Le résultat sera vrai si toutes les composantes du vecteur satisfont à la " -"condition de comparaison." - -msgid "" -"The result will be true if any of component in vector satisfy the comparison " -"condition." -msgstr "" -"Le résultat sera vrai si l’un des composants du vecteur satisfait la " -"condition de comparaison." - msgid "" "Translated to [code]texture(cubemap, vec3)[/code] in the shader language. " "Returns a color vector and alpha channel as scalar." @@ -18382,6 +20528,12 @@ msgstr "" msgid "No hints are added to the uniform declaration." msgstr "Aucun indice n'a été ajouté à la déclaration de l'uniform." +msgid "The source texture." +msgstr "La texture source." + +msgid "Visual Shader plugins" +msgstr "Plugins de Visual Shader" + msgid "" "This node is only available in [code]Fragment[/code] and [code]Light[/code] " "visual shaders." @@ -18417,6 +20569,9 @@ msgstr "" msgid "Translates to [code]dot(a, b)[/code] in the shader language." msgstr "Sera traduit en [code]dot(a, b)[/code] dans le code du shader." +msgid "Multiplies two numbers using [code]a * b[/code]." +msgstr "Multiplie deux nombres en utilisant [code]a * b[/code]." + msgid "No hint used." msgstr "Aucun indice utilisé." @@ -18539,6 +20694,9 @@ msgstr "Comparaison avec [code]INF[/code] (Infinité)." msgid "Translates to [code]mix(a, b, weight)[/code] in the shader language." msgstr "Sera traduit en [code]mix(a, b, weight)[/code] dans le code du shader." +msgid "A floating-point scalar type." +msgstr "Un scalaire à virgule flottante." + msgid "" "The proximity fade effect fades out each pixel based on its distance to " "another object." @@ -18993,12 +21151,37 @@ msgstr "" "Spécifie que les messages WebSockets doivent être transférés sous forme " "binaire (toute les combinaison d'octets sont autorisés)." +msgid "XR interface using WebXR." +msgstr "Une interface XR utilisant WebXR." + +msgid "" +"Returns the target ray mode for the given [param input_source_id].\n" +"This can help interpret the input coming from that input source. See " +"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/" +"targetRayMode]XRInputSource.targetRayMode[/url] for more information." +msgstr "" +"Retourne le mode du rayon de la cible pour le [param input_source_id] " +"spécifié.\n" +"Cela peut aider à interpréter les entrées provenant de ce contrôleur. Voir " +"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/" +"targetRayMode]XRInputSource.targetRayMode[/url] (en anglais) pour plus " +"d'informations." + msgid "Emitted when [member visibility_state] has changed." msgstr "Émis lorsque [member visibility_state] modifié." +msgid "Use [method Window.grab_focus] instead." +msgstr "Utilisez [method Window.grab_focus] à la place." + msgid "The icon for the close button." msgstr "L'icône personnalisée pour le bouton de fermeture." +msgid "The World3D's visual scenario." +msgstr "Le scénario visuel du World3D." + +msgid "The World3D's physics space." +msgstr "L’espace physique du World3D." + msgid "" "Default environment properties for the entire scene (post-processing effects, " "lighting and background settings)." @@ -19026,6 +21209,9 @@ msgstr "Il y aucun nœud (pas de fichier ou de mémoire tampon ouverte)." msgid "An anchor point in AR space." msgstr "Un point d'ancrage dans l'espace AR." +msgid "XR documentation index" +msgstr "Index de documentation de XR" + msgid "Returns a plane aligned with our anchor; handy for intersection testing." msgstr "" "Retourne un plan aligné avec notre ancre ; pratique pour les essais " @@ -19040,18 +21226,72 @@ msgstr "" "rapporte à une table dans le monde réel, c’est la taille estimée de la " "surface de cette table." +msgid "A tracked body in XR." +msgstr "Un corps suivi en XR." + +msgid "Hand tracking supported." +msgstr "Le suivi des mains est supporté." + +msgid "Root joint." +msgstr "Articulation de la racine." + msgid "Hips joint." msgstr "Articulation de la hanche." msgid "Spine joint." msgstr "Articulation de colonne vertébrale." +msgid "Chest joint." +msgstr "Articulation de la poitrine." + +msgid "Upper chest joint." +msgstr "Articulation de la poitrine supérieure." + msgid "Neck joint." msgstr "Articulation du cou." msgid "Head joint." msgstr "Articulation de la tête." +msgid "Left shoulder joint." +msgstr "Articulation de l'épaule gauche." + +msgid "Left upper arm joint." +msgstr "Articulation du bras supérieur gauche." + +msgid "Left lower arm joint." +msgstr "Articulation du bras inférieur gauche." + +msgid "Right upper arm joint." +msgstr "Articulation du bras supérieur droit." + +msgid "Right lower arm joint." +msgstr "Articulation du bras inférieur droit." + +msgid "Left upper leg joint." +msgstr "Articulation de la jambe supérieure gauche." + +msgid "Left lower leg joint." +msgstr "Articulation de la jambe inférieure gauche." + +msgid "Left foot joint." +msgstr "Articulation du pied gauche." + +msgid "Left toes joint." +msgstr "Articulation des orteils gauche." + +msgid "Right foot joint." +msgstr "Articulation du pied droit." + +msgid "Right toes joint." +msgstr "Articulation des orteils droit." + +msgid "Left hand joint." +msgstr "Articulation de la main gauche." + +msgid "Right hand joint." +msgstr "Articulation de la main droite." + msgid "" "A camera node with a few overrules for AR/VR applied, such as location " "tracking." @@ -19059,8 +21299,12 @@ msgstr "" "Un nœud de caméra avec quelques dérogations pour AR / VR appliquée, comme le " "suivi de localisation." -msgid "A spatial node representing a spatially-tracked controller." -msgstr "Nœud spatial représentant un contrôleur suivi spatialement." +msgid "" +"Returns the hand holding this controller, if known. See [enum " +"XRPositionalTracker.TrackerHand]." +msgstr "" +"Renvoie la main tenant ce contrôleur, si connue. Voir [enum " +"XRPositionalTracker.TrackerHand]." msgid "Emitted when a button on this controller is pressed." msgstr "Émis lorsqu’un bouton de ce contrôleur est appuyé." @@ -19068,15 +21312,114 @@ msgstr "Émis lorsqu’un bouton de ce contrôleur est appuyé." msgid "Emitted when a button on this controller is released." msgstr "Émis lorsqu'un bouton de ce contrôleur est relâché." +msgid "" +"An instance of this object represents a controller that is tracked.\n" +"As controllers are turned on and the [XRInterface] detects them, instances of " +"this object are automatically added to this list of active tracking objects " +"accessible through the [XRServer].\n" +"The [XRController3D] consumes objects of this type and should be used in your " +"project." +msgstr "" +"Une instance de cet objet représente un contrôleur qui est suivi.\n" +"Quand les contrôleurs sont activés et que [XRInterface] les détecte, les " +"instances de cet objet sont automatiquement ajoutées à cette liste d'objets " +"suivis actifs accessibles par le [XRServer].\n" +"Le [XRController3D] consomme des objets de ce type et devrait être utilisé " +"dans votre projet." + +msgid "The [XRFaceTracker] path." +msgstr "Le chemin du [XRFaceTracker]." + +msgid "A tracked face." +msgstr "Un visage suivi." + +msgid "Right eye looks outwards." +msgstr "L'œil droit regarde vers l'extérieur." + +msgid "Right eye looks inwards." +msgstr "L'œil droit regarde vers l'intérieur." + +msgid "Right eye looks upwards." +msgstr "L'œil droit regarde vers le haut." + +msgid "Right eye looks downwards." +msgstr "L'œil droit regarde vers le bas." + +msgid "Left eye looks outwards." +msgstr "L'œil gauche regarde vers l'extérieur." + +msgid "Left eye looks inwards." +msgstr "L'œil gauche regarde vers l'intérieur." + +msgid "Left eye looks upwards." +msgstr "L'œil gauche regarde vers le haut." + +msgid "Left eye looks downwards." +msgstr "L'œil gauche regarde vers le bas." + msgid "Opens jawbone." msgstr "Ouvre le maxillaire." +msgid "Closes the mouth." +msgstr "Ferme la bouche." + +msgid "Pushes jawbone forward." +msgstr "Pousse la mandibule en avant." + +msgid "Pushes jawbone backward." +msgstr "Pousse la mandibule en arrière." + +msgid "Flexes jaw muscles." +msgstr "Fléchit les muscles de la mâchoire." + +msgid "Tongue points upwards." +msgstr "La langue pointe vers le haut." + +msgid "Tongue points downwards." +msgstr "La langue pointe vers le bas." + +msgid "Tongue points right." +msgstr "La langue pointe vers la droite." + +msgid "Tongue points left." +msgstr "La langue pointe vers la gauche." + +msgid "Dilates both pupils." +msgstr "Dilate les deux pupilles." + +msgid "Constricts both pupils." +msgstr "Constricte les deux pupilles." + +msgid "Puffs both cheeks." +msgstr "Gonfle les deux joues." + +msgid "Raises both cheeks." +msgstr "Lève les deux joues." + +msgid "Lips push outwards." +msgstr "Les lèvres poussent vers l'extérieur." + +msgid "Moves mouth left." +msgstr "Déplace la joue à gauche." + +msgid "Mouth expresses sadness." +msgstr "La bouche exprime de la tristesse." + msgid "Mouth stretches." msgstr "La bouche s'étire." +msgid "Lip corners dimple." +msgstr "Les angles de la lèvre se creusent." + msgid "Mouth tightens." msgstr "La bouche se serre." +msgid "A tracked hand in XR." +msgstr "Une main suivie en XR." + +msgid "Base class for an XR interface implementation." +msgstr "Classe de base pour une implémentation d’interface XR." + msgid "" "If this is an AR interface that requires displaying a camera feed as the " "background, this method returns the feed ID in the [CameraServer] for this " @@ -19093,6 +21436,14 @@ msgstr "" "Retourne une combinaison d’indicateurs [enum Capabilities] fournissant des " "informations sur les fonctionnalités de cette interface." +msgid "" +"Returns the name of this interface ([code]\"OpenXR\"[/code], " +"[code]\"OpenVR\"[/code], [code]\"OpenHMD\"[/code], [code]\"ARKit\"[/code], " +"etc.)." +msgstr "" +"Renvoie le nom de cette interface ([code]\"OpenXR\"[/code], [code]\"OpenVR\"[/" +"code], [code]\"OpenHMD\"[/code], [code]\"ARKit\"[/code], etc.)." + msgid "" "Returns the resolution at which we should render our intermediate results " "before things like lens distortion are applied by the VR platform." @@ -19122,6 +21473,9 @@ msgstr "" msgid "[code]true[/code] if this is the primary interface." msgstr "[code]true[/code] (vrai) si c'est l'interface principale." +msgid "No XR capabilities." +msgstr "Pas de capacité XR." + msgid "This interface can work with normal rendering output (non-HMD based AR)." msgstr "" "Cette interface peut fonctionner avec la sortie de rendu normale (AR non " @@ -19144,6 +21498,13 @@ msgstr "" "Le suivi est gêné par un mouvement excessif (le joueur se déplace trop vite " "par rapport à ce que le suivi peut suivre)." +msgid "" +"Tracking is hindered by insufficient features, it's too dark (for camera-" +"based tracking), player is blocked, etc." +msgstr "" +"Le suivi est gêné par des caractéristiques insuffisantes, il fait trop sombre " +"(pour du suivi par caméra), le joueur est bloqué, etc..." + msgid "" "We don't know the status of the tracking or this interface does not provide " "feedback." @@ -19158,12 +21519,61 @@ msgstr "" "Le suivi n'est pas fonctionnel (la caméra n'est pas branchée ou cachée, les " "lumières sont éteintes, etc.)." +msgid "Base class for XR interface extensions (plugins)." +msgstr "Classe de base pour une implémentation d’interface XR." + +msgid "Returns the [Transform3D] that positions the [XRCamera3D] in the world." +msgstr "Renvoie la [Transform3D] qui positionne la [XRCamera3D] dans le monde." + msgid "The origin point in AR/VR." msgstr "Le point d'origine en AR / VR." +msgid "" +"If [code]true[/code], this origin node is currently being used by the " +"[XRServer]. Only one origin point can be used at a time." +msgstr "" +"Si [code]true[/code], ce noeud d'origine est actuellement utilisé par le " +"[XRServer]. Un seul point d'origine peut être utilisé à la fois." + msgid "A tracked object." msgstr "Un objet suivi." +msgid "" +"An instance of this object represents a device that is tracked, such as a " +"controller or anchor point. HMDs aren't represented here as they are handled " +"internally.\n" +"As controllers are turned on and the [XRInterface] detects them, instances of " +"this object are automatically added to this list of active tracking objects " +"accessible through the [XRServer].\n" +"The [XRNode3D] and [XRAnchor3D] both consume objects of this type and should " +"be used in your project. The positional trackers are just under-the-hood " +"objects that make this all work. These are mostly exposed so that GDExtension-" +"based interfaces can interact with them." +msgstr "" +"Une instance de cet objet représente un dispositif qui est suivi, comme un " +"contrôleur ou un point d'ancrage. Les casques ne sont pas représentés ici car " +"ils sont gérés en interne.\n" +"Quand les contrôleurs sont activés et que [XRInterface] les détecte, les " +"instances de cet objet sont automatiquement ajoutées à cette liste d'objets " +"suivis actifs accessibles par le [XRServer].\n" +"Les [XRNode3D] et [XRAnchor3D] consomment tous les deux des objets de ce type " +"et doivent être utilisés dans votre projet. Les trackers positionnels sont " +"juste des objets sous le capot qui font fonctionner tout ça. Ceux-ci sont " +"généralement exposés de sorte que les interfaces basées sur GDExtension " +"peuvent interagir avec eux." + +msgid "" +"Returns the current [XRPose] state object for the bound [param name] pose." +msgstr "Renvoie l'objet d'état [XRPose] actuel pour la pose [param name] liée." + +msgid "" +"Emitted when a button on this tracker is pressed. Note that many XR runtimes " +"allow other inputs to be mapped to buttons." +msgstr "" +"Émis quand un bouton sur ce tracker est pressé. Notez que de nombreux " +"environnements d'exécution XR permettent de mapper d'autres entrées sur des " +"boutons." + msgid "The hand this tracker is held in is unknown or not applicable." msgstr "La main de ce traqueur est inconnue ou sa valeur est invalide." @@ -19183,6 +21593,12 @@ msgstr "" "Les serveurs AR/VR sont au cœur de nos solutions avancées de réalité " "virtuelle, traitant tous les processus." +msgid "Registers an [XRInterface] object." +msgstr "Enregistre un objet [XRInterface]." + +msgid "Registers a new [XRTracker] that tracks a physical object." +msgstr "Enregistre un nouveau [XRTracker] qui suit un objet physique." + msgid "Returns the primary interface's transformation." msgstr "Retourne la transformation de l'interface primaire." @@ -19205,6 +21621,33 @@ msgstr "" "Retourne une liste des interfaces disponibles avec l'identifiant et le nom de " "chaque interface." +msgid "The primary [XRInterface] currently bound to the [XRServer]." +msgstr "La [XRInterface] principale actuellement connectée à ce [XRServer]." + +msgid "" +"Emitted when a new tracker has been added. If you don't use a fixed number of " +"controllers or if you're using [XRAnchor3D]s for an AR solution, it is " +"important to react to this signal to add the appropriate [XRController3D] or " +"[XRAnchor3D] nodes related to this new tracker." +msgstr "" +"Émis quand un nouveau tracker a été ajouté. Si vous n'utilisez pas un nombre " +"fixe de contrôleurs ou si vous utilisez [XRAnchor3D] pour une solution AR, il " +"est important de réagir à ce signal pour ajouter les nœuds [XRController3D] " +"ou [XRAnchor3D] appropriés liés à ce nouveau tracker." + +msgid "" +"Emitted when a tracker is removed. You should remove any [XRController3D] or " +"[XRAnchor3D] points if applicable. This is not mandatory, the nodes simply " +"become inactive and will be made active again when a new tracker becomes " +"available (i.e. a new controller is switched on that takes the place of the " +"previous one)." +msgstr "" +"Émis quand un tracker est retiré. Vous devez supprimer tout [XRController3D] " +"ou [XRAnchor3D] si nécessaire. Ce n'est pas obligatoire, les nœuds deviennent " +"tout simplement inactifs et seront de nouveau actifs lorsqu'un nouveau " +"tracker sera disponible (quand un nouveau contrôleur activé prendra la place " +"du précédent)." + msgid "The tracker tracks the location of a controller." msgstr "Le traqueur permet de suivre la localisation d'un contrôleur." @@ -19251,6 +21694,12 @@ msgstr "" "Ne réinitialise pas l'orientation du visiocasque, centre seulement la " "position du joueur." +msgid "This object is the base of all XR trackers." +msgstr "Cet objet est la base de tous les trackers XR." + +msgid "The type of tracker." +msgstr "Le type de tracker." + msgid "" "The strength used to calculate the VRS density map. The greater this value, " "the more noticeable VRS is." @@ -19269,3 +21718,16 @@ msgid "Add new files to the existing zip archive at the given path." msgstr "" "Ajoute de nouveaux fichiers à l'archive zip existante à l'emplacement " "spécifié." + +msgid "" +"Opens the zip archive at the given [param path] and reads its file index." +msgstr "Ouvre l'archive zip indiquée par [param path] et lit son index." + +msgid "" +"Loads the whole content of a file in the loaded zip archive into memory and " +"returns it.\n" +"Must be called after [method open]." +msgstr "" +"Charge l'intégralité du contenu d'un fichier dans l'archive zip chargée en " +"mémoire et le retourne.\n" +"Doit être appelé après [method open]." diff --git a/doc/translations/ga.po b/doc/translations/ga.po index 51a75061d01..9f13246c890 100644 --- a/doc/translations/ga.po +++ b/doc/translations/ga.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2024-09-14 08:09+0000\n" +"PO-Revision-Date: 2024-09-18 19:41+0000\n" "Last-Translator: Aindriú Mac Giolla Eoin \n" "Language-Team: Irish \n" @@ -265,16 +265,6 @@ msgstr "" msgid "Built-in GDScript constants, functions, and annotations." msgstr "Tairisigh, feidhmeanna agus nótaí GDScript ionsuite." -msgid "" -"A list of GDScript-specific utility functions and annotations accessible from " -"any script.\n" -"For the list of the global functions and constants see [@GlobalScope]." -msgstr "" -"Liosta d'fheidhmeanna agus nótaí fóntais a bhaineann go sonrach le GDScript a " -"bhfuil rochtain orthu ó aon script.\n" -"Le haghaidh liosta na bhfeidhmeanna agus na tairisigh dhomhanda féach " -"[@GlobalScope]." - msgid "GDScript exports" msgstr "Onnmhairithe GDScript" @@ -366,23 +356,6 @@ msgstr "" "[b]Nóta:[/b] Eochairfhocal is ea [dearbhú modha], ní feidhm. Mar sin ní " "féidir leat é a rochtain mar [Inghlao] nó é a úsáid taobh istigh de nathanna." -msgid "" -"Returns a single character (as a [String]) of the given Unicode code point " -"(which is compatible with ASCII code).\n" -"[codeblock]\n" -"a = char(65) # a is \"A\"\n" -"a = char(65 + 32) # a is \"a\"\n" -"a = char(8364) # a is \"€\"\n" -"[/codeblock]" -msgstr "" -"Filleann sé carachtar amháin (mar [Teaghrán]) den phointe cód Unicode tugtha " -"(atá comhoiriúnach le cód ASCII).\n" -"[codeblock]\n" -"a = char(65) # a is \"A\"\n" -"a = char(65+32) # a is \"a\"\n" -"a = char(8364) # a is \"€\"\n" -"[/codeblock]" - msgid "Use [method @GlobalScope.type_convert] instead." msgstr "Úsáid [method @GlobalScope.type_convert] ina ionad sin." @@ -466,116 +439,6 @@ msgstr "" "[b]Nóta:[/b] Ní thacaítear le glaoch na feidhme seo ó [Snáithe]. Má dhéantar " "é sin, cuirfear eagar folamh ar ais." -msgid "" -"Returns the passed [param instance] converted to a Dictionary. Can be useful " -"for serializing.\n" -"[b]Note:[/b] Cannot be used to serialize objects with built-in scripts " -"attached or objects allocated within built-in scripts.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _ready():\n" -" var d = inst_to_dict(self)\n" -" print(d.keys())\n" -" print(d.values())\n" -"[/codeblock]\n" -"Prints out:\n" -"[codeblock lang=text]\n" -"[@subpath, @path, foo]\n" -"[, res://test.gd, bar]\n" -"[/codeblock]" -msgstr "" -"Filleann sé an pas [param instance] arna thiontú go Foclóir. Is féidir a " -"bheith úsáideach le haghaidh serializing.\n" -"[b]Nóta:[/b] Ní féidir é a úsáid chun oibiachtaí a shraithiú a bhfuil " -"scripteanna ionsuite ceangailte leo nó réada a leithdháiltear laistigh de " -"scripteanna ionsuite.\n" -"[codeblock]\n" -"var foo = \"bar\"\n" -"func _réidh():\n" -" var d = inst_to_dict(féin)\n" -" priontáil(d.eochracha())\n" -" priontáil(d.luachanna())\n" -"[/codeblock]\n" -"Priontaí amach:\n" -"[codeblock lang=téacs]\n" -"[@subpath, @cosán, foo]\n" -"[, res://test.gd, barra]\n" -"[/codeblock]" - -msgid "" -"Returns [code]true[/code] if [param value] is an instance of [param type]. " -"The [param type] value must be one of the following:\n" -"- A constant from the [enum Variant.Type] enumeration, for example [constant " -"TYPE_INT].\n" -"- An [Object]-derived class which exists in [ClassDB], for example [Node].\n" -"- A [Script] (you can use any class, including inner one).\n" -"Unlike the right operand of the [code]is[/code] operator, [param type] can be " -"a non-constant value. The [code]is[/code] operator supports more features " -"(such as typed arrays). Use the operator instead of this method if you do not " -"need dynamic type checking.\n" -"Examples:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Node))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Note:[/b] If [param value] and/or [param type] are freed objects (see " -"[method @GlobalScope.is_instance_valid]), or [param type] is not one of the " -"above options, this method will raise a runtime error.\n" -"See also [method @GlobalScope.typeof], [method type_exists], [method Array." -"is_same_typed] (and other [Array] methods)." -msgstr "" -"Filleann sé [code]true[/code] más rud é [cineál param] [cineál param]. " -"Caithfidh luach [cineál param] a bheith mar cheann díobh seo a leanas:\n" -"- Tairiseach ón áireamh [enum Variant.Type], mar shampla [TYPE_INT " -"tairiseach].\n" -"- Aicme [Object]-díorthaithe atá ann in [Aicme DB], mar shampla [Nóid].\n" -"- A [Script] (is féidir leat úsáid a bhaint as aon rang, lena n-áirítear " -"ceann istigh).\n" -"Murab ionann agus oibriú ceart an oibreora [code]is[/code], is féidir le " -"[cineál param] a bheith ina luach neamhsheasmhach. Tacaíonn an t-oibreoir " -"[code]is[/code] le níos mó gnéithe (amhail eagar clóscríofa). Úsáid an t-" -"oibreoir in ionad an mhodha seo mura bhfuil seiceáil cineál dinimiciúil " -"uait.\n" -"Samplaí:\n" -"[codeblock]\n" -"print(is_instance_of(a, TYPE_INT))\n" -"print(is_instance_of(a, Nód))\n" -"print(is_instance_of(a, MyClass))\n" -"print(is_instance_of(a, MyClass.InnerClass))\n" -"[/codeblock]\n" -"[b]Nóta:[/b] Más réada saortha iad [param value] agus/nó [cineál param] " -"(féach [method @GlobalScope.is_instance_valid]), nó [cineál param] nach ceann " -"de na roghanna thuas é, an modh seo ardóidh sé earráid ama rite.\n" -"Féach freisin [method @GlobalScope.typeof], [method type_exists], [method " -"Array.is_same_typed] (agus modhanna [Array] eile)." - -msgid "" -"Returns the length of the given Variant [param var]. The length can be the " -"character count of a [String] or [StringName], the element count of any array " -"type, or the size of a [Dictionary]. For every other Variant type, a run-time " -"error is generated and execution is stopped.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Returns 4\n" -"\n" -"b = \"Hello!\"\n" -"len(b) # Returns 6\n" -"[/codeblock]" -msgstr "" -"Filleann sé fad an athraitheach a tugadh [param var]. Is féidir an fad a " -"bheith mar chomhaireamh carachtar [Teaghrán] nó [StringName], comhaireamh " -"eilimint d’aon chineál eagar, nó méid [Foclóir]. I gcás gach cineál Athraithe " -"eile, gintear earráid ama rite agus stoptar an cur i gcrích.\n" -"[codeblock]\n" -"a = [1, 2, 3, 4]\n" -"len(a) # Filleann 4\n" -"\n" -"b = \"Dia duit!\"\n" -"len(b) # Filleann 6\n" -"[/codeblock]" - msgid "" "Returns a [Resource] from the filesystem located at the absolute [param " "path]. Unless it's already referenced elsewhere (such as in another script or " @@ -725,105 +588,6 @@ msgstr "" "[b]Nóta:[/b] Ní thacaítear le glaoch na feidhme seo ó [Snáithe]. Má dhéantar " "é sin, déanfar an t-aitheantas snáithe a phriontáil." -msgid "" -"Returns an array with the given range. [method range] can be called in three " -"ways:\n" -"[code]range(n: int)[/code]: Starts from 0, increases by steps of 1, and stops " -"[i]before[/i] [code]n[/code]. The argument [code]n[/code] is [b]exclusive[/" -"b].\n" -"[code]range(b: int, n: int)[/code]: Starts from [code]b[/code], increases by " -"steps of 1, and stops [i]before[/i] [code]n[/code]. The arguments [code]b[/" -"code] and [code]n[/code] are [b]inclusive[/b] and [b]exclusive[/b], " -"respectively.\n" -"[code]range(b: int, n: int, s: int)[/code]: Starts from [code]b[/code], " -"increases/decreases by steps of [code]s[/code], and stops [i]before[/i] " -"[code]n[/code]. The arguments [code]b[/code] and [code]n[/code] are " -"[b]inclusive[/b] and [b]exclusive[/b], respectively. The argument [code]s[/" -"code] [b]can[/b] be negative, but not [code]0[/code]. If [code]s[/code] is " -"[code]0[/code], an error message is printed.\n" -"[method range] converts all arguments to [int] before processing.\n" -"[b]Note:[/b] Returns an empty array if no value meets the value constraint (e." -"g. [code]range(2, 5, -1)[/code] or [code]range(5, 5, 1)[/code]).\n" -"Examples:\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" -"To iterate over an [Array] backwards, use:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"for i in range(array.size() - 1, -1, -1):\n" -" print(array[i])\n" -"[/codeblock]\n" -"Output:\n" -"[codeblock lang=text]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]\n" -"To iterate over [float], convert them in the loop.\n" -"[codeblock]\n" -"for i in range (3, 0, -1):\n" -" print(i / 10.0)\n" -"[/codeblock]\n" -"Output:\n" -"[codeblock lang=text]\n" -"0.3\n" -"0.2\n" -"0.1\n" -"[/codeblock]" -msgstr "" -"Filleann sé eagar leis an raon tugtha. Is féidir [method range] a ghlaoch ar " -"thrí bhealach:\n" -"[code]range(n: int)[/code]: Tosaíonn sé ó 0, méadaíonn sé céimeanna 1, agus " -"stopann [i]roimh[/i] [code]n[/code]. Tá an argóint [code]n[/code] [b]eisiach[/" -"b].\n" -"[code]range(b: int, n: int)[/code]: Tosaíonn ó [code]b[/code], méadaíonn sé " -"céimeanna 1, agus stopann sé [i]roimh[/i] [code]n[/code]. Tá na hargóintí " -"[code]b[/code] agus [code]n[/code] [b]cuimsitheach[/b] agus [b]eisiatach[/b], " -"faoi seach.\n" -"[code]range(b: int, n: int, s: int)[/code]: Tosaíonn ó [code]b[/code], " -"méadaítear/laghdaítear de réir céimeanna [code]s[/code], agus stopann sé " -"[i]roimh[/i] [code]n[/code]. Tá na hargóintí [code]b[/code] agus [code]n[/" -"code] [b]cuimsitheach[/b] agus [b]eisiatach[/b], faoi seach. Is féidir leis " -"an argóint [code]s[/code] [b]a[/b] a bheith diúltach, ach ní [code]0[/code]. " -"Más é [code]s[/code]ná [code]0[/code], clóitear teachtaireacht earráide.\n" -"Tiontaíonn [method range] gach argóint go [int] roimh phróiseáil.\n" -"[b]Nóta:[/b] Filltear eagar folamh mura gcomhlíonann aon luach an srian " -"luacha (m.sh. [code]range(2, 5, -1)[/code] nó [code]range(5, 5, 1) [/code]).\n" -"Samplaí:\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" -"Chun atriall thar [Array] ar gcúl, úsáid:\n" -"[codeblock]\n" -"var array = [3, 6, 9]\n" -"for i in range(array.size() - 1, -1, -1):\n" -" print(array[i])\n" -"[/codeblock]\n" -"Aschur:\n" -"[codeblock lang=text]\n" -"9\n" -"6\n" -"3\n" -"[/codeblock]\n" -"Chun athrá thar [float], tiontaigh sa lúb iad.\n" -"[codeblock]\n" -"for i in range (3, 0, -1):\n" -" print(i / 10.0)\n" -"[/codeblock]\n" -"Aschur:\n" -"[codeblock lang=text]\n" -"0.3\n" -"0.2\n" -"0.1\n" -"[/codeblock]" - msgid "" "Returns [code]true[/code] if the given [Object]-derived class exists in " "[ClassDB]. Note that [Variant] data types are not registered in [ClassDB].\n" @@ -1658,87 +1422,6 @@ msgstr "" "@export var c: int # Stóráilte sa chomhad, ar taispeáint san eagarthóir.\n" "[/codeblock]" -msgid "" -"Define a new subgroup for the following exported properties. This helps to " -"organize properties in the Inspector dock. Subgroups work exactly like " -"groups, except they need a parent group to exist. See [annotation " -"@export_group].\n" -"See also [constant PROPERTY_USAGE_SUBGROUP].\n" -"[codeblock]\n" -"@export_group(\"Racer Properties\")\n" -"@export var nickname = \"Nick\"\n" -"@export var age = 26\n" -"\n" -"@export_subgroup(\"Car Properties\", \"car_\")\n" -"@export var car_label = \"Speedy\"\n" -"@export var car_number = 3\n" -"[/codeblock]\n" -"[b]Note:[/b] Subgroups cannot be nested, they only provide one extra level of " -"depth. Just like the next group ends the previous group, so do the subsequent " -"subgroups." -msgstr "" -"Sainmhínigh foghrúpa nua do na hairíonna easpórtála seo a leanas. Cuidíonn sé " -"seo le réadmhaoin a eagrú i nduga an Chigire. Oibríonn foghrúpaí díreach " -"cosúil le grúpaí, ach amháin go dteastaíonn grúpa tuismitheoirí uathu. Féach " -"ar [anótáil @export_group].\n" -"Féach freisin [PROPERTY_USAGE_SUBGROUP leanúnach].\n" -"[codeblock]\n" -"@export_group(\"Airíonna Racer\")\n" -"@export var leasainm = \"Leasainm\"\n" -"@export var aois = 26\n" -"\n" -"@export_subgroup (\"Airíonna Gluaisteán\", \"car_\")\n" -"@export var car_label = \"Gasta\"\n" -"@export var car_number = 3\n" -"[/codeblock]\n" -"[b]Nóta:[/b] Ní féidir foghrúpaí a neadú, ní sholáthraíonn siad ach leibhéal " -"breise doimhneachta amháin. Díreach mar a chríochnaíonn an chéad ghrúpa eile " -"leis an ngrúpa roimhe seo, mar sin déan na foghrúpaí ina dhiaidh sin." - -msgid "" -"Add a custom icon to the current script. The icon specified at [param " -"icon_path] is displayed in the Scene dock for every node of that class, as " -"well as in various editor dialogs.\n" -"[codeblock]\n" -"@icon(\"res://path/to/class/icon.svg\")\n" -"[/codeblock]\n" -"[b]Note:[/b] Only the script can have a custom icon. Inner classes are not " -"supported.\n" -"[b]Note:[/b] As annotations describe their subject, the [annotation @icon] " -"annotation must be placed before the class definition and inheritance.\n" -"[b]Note:[/b] Unlike other annotations, the argument of the [annotation @icon] " -"annotation must be a string literal (constant expressions are not supported)." -msgstr "" -"Cuir deilbhín saincheaptha leis an script reatha. Taispeántar an deilbhín atá " -"sonraithe ag [param icon_path] sa duga Radharc do gach nód den aicme sin, " -"agus i ndialóga éagsúla eagarthóirí.\n" -"[codeblock]\n" -"@icon (\"res://path/to/class/icon.svg\")\n" -"[/codeblock]\n" -"[b]Nóta:[/b] Ní féidir ach deilbhín saincheaptha a bheith ag an script. Ní " -"thacaítear le ranganna istigh.\n" -"[b]Nóta:[/b] Mar a chuireann nótaí síos ar a n-ábhar, ní mór an nóta [anótáil " -"@ deilbhín] a chur roimh shainiú agus oidhreacht an ranga.\n" -"[b]Nóta:[/b] Murab ionann agus nótaí eile, caithfidh argóint an nóta [anótáil " -"@ deilbhín] a bheith ina teagh-liteartha (ní thacaítear le slonn seasta)." - -msgid "" -"Mark the following property as assigned when the [Node] is ready. Values for " -"these properties are not assigned immediately when the node is initialized " -"([method Object._init]), and instead are computed and stored right before " -"[method Node._ready].\n" -"[codeblock]\n" -"@onready var character_name: Label = $Label\n" -"[/codeblock]" -msgstr "" -"Marcáil an airí seo a leanas mar a sannadh nuair a bheidh an [Nóid] réidh. Ní " -"shanntar luachanna do na hairíonna seo láithreach nuair a chuirtear tús leis " -"an nód ([method Object._init]), agus ina ionad sin déantar iad a ríomh agus a " -"stóráil díreach roimh [method Nód._ready].\n" -"[codeblock]\n" -"@onready var character_name: Lipéad = $Label\n" -"[/codeblock]" - msgid "" "Mark the following method for remote procedure calls. See [url=$DOCS_URL/" "tutorials/networking/high_level_multiplayer.html]High-level multiplayer[/" @@ -1864,49 +1547,9 @@ msgstr "" "[b]Nóta:[/b] Mar a chuireann nótaí síos ar a n-ábhar, ní mór an nóta [anótáil " "@uirlis] a chur roimh shainiú an ranga agus oidhreacht." -msgid "" -"Mark the following statement to ignore the specified [param warning]. See " -"[url=$DOCS_URL/tutorials/scripting/gdscript/warning_system.html]GDScript " -"warning system[/url].\n" -"[codeblock]\n" -"func test():\n" -" print(\"hello\")\n" -" return\n" -" @warning_ignore(\"unreachable_code\")\n" -" print(\"unreachable\")\n" -"[/codeblock]" -msgstr "" -"Marcáil an ráiteas seo a leanas chun neamhaird a dhéanamh den [pararabhadh] " -"sonraithe. Féach [url=$DOCS_URL/tutorials/scripting/gdscript/warning_system." -"html]córas rabhaidh GDScript[/url].\n" -"[codeblock]\n" -"tástáil fheidhm():\n" -" cló (\"hello\")\n" -" filleadh\n" -" @warning_ignore (\"cód_do-bhainte amach\")\n" -" cló (\"dosroichte\")\n" -"[/codeblock]" - msgid "Global scope constants and functions." msgstr "Tairisigh agus feidhmeanna raon feidhme domhanda." -msgid "" -"A list of global scope enumerated constants and built-in functions. This is " -"all that resides in the globals, constants regarding error codes, keycodes, " -"property hints, etc.\n" -"Singletons are also documented here, since they can be accessed from " -"anywhere.\n" -"For the entries related to GDScript which can be accessed in any script see " -"[@GDScript]." -msgstr "" -"Tá liosta de raon feidhme domhanda tairisigh áireamh agus-tógtha i " -"feidhmeanna.... Is é seo go léir a chónaíonn sna cruinneanna, tairisigh " -"maidir le cóid earráide, eochairchóid, leideanna maoine, etc.\n" -"Tá Singletons doiciméadaithe anseo freisin, toisc gur féidir iad a rochtain ó " -"áit ar bith.\n" -"Le haghaidh na n-iontrálacha a bhaineann le GDScript ar féidir rochtain a " -"fháil orthu in aon script féach [@GDScript]." - msgid "Random number generation" msgstr "Giniúint uimhir randamach" @@ -2037,16 +1680,6 @@ msgstr "" "var b = acosh(-1) # Filleann 0\n" "[/codeblock]" -msgid "" -"Returns the difference between the two angles, in the range of [code][-PI, " -"+PI][/code]. When [param from] and [param to] are opposite, returns [code]-" -"PI[/code] if [param from] is smaller than [param to], or [code]PI[/code] " -"otherwise." -msgstr "" -"Filleann sé an difríocht idir an dá uillinn, sa raon [code][-PI, +PI][/code]. " -"Nuair atá [param ó] agus [param go] os coinne, filleann [code]-PI[/code] má " -"tá [param ó] níos lú ná [param go], nó [code]PI[/code] ar shlí eile." - msgid "" "Returns the arc sine of [param x] in radians. Use to get the angle of sine " "[param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/" @@ -2406,60 +2039,6 @@ msgstr "" "var r = deg_to_rad(180) tá # r cothrom le 3. 141593\n" "[/codeblock]" -msgid "" -"Returns an \"eased\" value of [param x] based on an easing function defined " -"with [param curve]. This easing function is based on an exponent. The [param " -"curve] can be any floating-point number, with specific values leading to the " -"following behaviors:\n" -"[codeblock lang=text]\n" -"- Lower than -1.0 (exclusive): Ease in-out\n" -"- 1.0: Linear\n" -"- Between -1.0 and 0.0 (exclusive): Ease out-in\n" -"- 0.0: Constant\n" -"- Between 0.0 to 1.0 (exclusive): Ease out\n" -"- 1.0: Linear\n" -"- Greater than 1.0 (exclusive): Ease in\n" -"[/codeblock]\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n" -"See also [method smoothstep]. If you need to perform more advanced " -"transitions, use [method Tween.interpolate_value]." -msgstr "" -"Filleann sé luach \"éascaithe\" de [param x] bunaithe ar fheidhm éascaithe " -"atá sainmhínithe le [cuar param]. Tá an fheidhm éascaithe seo bunaithe ar " -"easpónant. Is féidir leis an [cuar param] a bheith ina uimhir snámhphointe ar " -"bith, le luachanna sonracha as a leanann na hiompraíochtaí seo a leanas:\n" -"[codeblock lang=téacs]\n" -"- Níos ísle ná -1.0 (eisiach): Éascaíocht isteach\n" -"- 1.0: Líneach\n" -"- Idir -1.0 agus 0.0 (eisiach): Éascaíocht lasmuigh\n" -"- 0.0: tairiseach\n" -"- Idir 0.0 go 1.0 (eisiach): Éascaigh amach\n" -"- 1.0: Líneach\n" -"- Níos mó ná 1.0 (eisiach): Éascaíocht isteach\n" -"[/codeblock]\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"ease_cheatsheet.png]caolbhileog luachanna cuar éasca()[/url]\n" -"Féach freisin [method smoothstep]. Más gá duit aistrithe níos forbartha a " -"dhéanamh, úsáid [method Tween.interpolate_value]." - -msgid "" -"Returns a human-readable name for the given [enum Error] code.\n" -"[codeblock]\n" -"print(OK) # Prints 0\n" -"print(error_string(OK)) # Prints OK\n" -"print(error_string(ERR_BUSY)) # Prints Busy\n" -"print(error_string(ERR_OUT_OF_MEMORY)) # Prints Out of memory\n" -"[/codeblock]" -msgstr "" -"Tugann sé ar ais ainm atá inléite ag an duine don chód [enum Error] tugtha.\n" -"[codeblock]\n" -"priontáil(OK) # Priontála 0\n" -"print(error_string(OK)) # Priontála Ceart go leor\n" -"print(error_string(ERR_BUSY)) # Priontála Gnóthach\n" -"print(error_string(ERR_OUT_OF_MEMORY)) # Priontála As cuimhne\n" -"[/codeblock]" - msgid "" "The natural exponential function. It raises the mathematical constant [i]e[/" "i] to the power of [param x] and returns it.\n" @@ -2605,59 +2184,6 @@ msgstr "" "[/csharp]\n" "[/codeblocks]" -msgid "" -"Returns the [Object] that corresponds to [param instance_id]. All Objects " -"have a unique instance ID. See also [method Object.get_instance_id].\n" -"[codeblocks]\n" -"[gdscript]\n" -"var foo = \"bar\"\n" -"\n" -"func _ready():\n" -" var id = get_instance_id()\n" -" var inst = instance_from_id(id)\n" -" print(inst.foo) # Prints bar\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyNode : Node\n" -"{\n" -" public string Foo { get; set; } = \"bar\";\n" -"\n" -" public override void _Ready()\n" -" {\n" -" ulong id = GetInstanceId();\n" -" var inst = (MyNode)InstanceFromId(Id);\n" -" GD.Print(inst.Foo); // Prints bar\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Filleann sé an [Réad] a fhreagraíonn do [param instance_id]. Tá ID ásc " -"uathúil ag gach Rud. Féach freisin [method Object.get_instance_id].\n" -"[codeblocks]\n" -"[gdscript]\n" -"var foo = \"bar\"\n" -"\n" -"func _réidh():\n" -" var id = get_instance_id()\n" -" var inst = instance_from_id(id)\n" -" print(inst.foo) # Barra priontaí\n" -"[/gdscript]\n" -"[csharp]\n" -"páirt-aicme poiblí MyNode : Nód\n" -"{\n" -" teaghrán poiblí Foo { faigh; tacair ; } = \"barra\";\n" -"\n" -" poiblí a shárú ar neamhní _Ready()\n" -" {\n" -" ulong id = GetInstanceId();\n" -" var inst = (MyNode)InstanceFromId(Id);\n" -" GD.Print(inst.Foo); // Barra priontaí\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns an interpolation or extrapolation factor considering the range " "specified in [param from] and [param to], and the interpolated value " @@ -2824,46 +2350,6 @@ msgstr "" "Tá an fheidhm seo níos tapúla ná úsáid a bhaint as [method is_equal_approx] " "le luach amháin mar nialas." -msgid "" -"Linearly interpolates between two values by the factor defined in [param " -"weight]. To perform interpolation, [param weight] should be between " -"[code]0.0[/code] and [code]1.0[/code] (inclusive). However, values outside " -"this range are allowed and can be used to perform [i]extrapolation[/i]. If " -"this is not desired, use [method clamp] on the result of this function.\n" -"Both [param from] and [param to] must be the same type. Supported types: " -"[int], [float], [Vector2], [Vector3], [Vector4], [Color], [Quaternion], " -"[Basis].\n" -"[codeblock]\n" -"lerp(0, 4, 0.75) # Returns 3.0\n" -"[/codeblock]\n" -"See also [method inverse_lerp] which performs the reverse of this operation. " -"To perform eased interpolation with [method lerp], combine it with [method " -"ease] or [method smoothstep]. See also [method remap] to map a continuous " -"series of values to another.\n" -"[b]Note:[/b] For better type safety, use [method lerpf], [method Vector2." -"lerp], [method Vector3.lerp], [method Vector4.lerp], [method Color.lerp], " -"[method Quaternion.slerp] or [method Basis.slerp]." -msgstr "" -"Idirshuíonn go líneach idir dhá luach de réir an fhachtóir atá sainmhínithe " -"in [meáchan param]. Chun idirshuíomh a dhéanamh, ba cheart go mbeadh [meáchan " -"param] idir [code]0.0[/code] agus [code]1.0[/code] (san áireamh). Mar sin " -"féin, ceadaítear luachanna lasmuigh den raon seo agus is féidir iad a úsáid " -"chun [i]eachtarshuíomh[/i] a dhéanamh. Mura bhfuil sé seo inmhianaithe, úsáid " -"[clamp modh] ar thoradh na feidhme seo.\n" -"Caithfidh [param ó] agus [param go] a bheith den chineál céanna. Cineálacha " -"tacaithe: [int], [snámhphointe], [Vector2], [Vector3], [Vector4], [Color], " -"[Ceathrún], [Bunús].\n" -"[codeblock]\n" -"lerp(0, 4, 0.75) # Fill ar ais 3. 0\n" -"[/codeblock]\n" -"Féach freisin [method inverse_lerp] a fheidhmíonn cúl na hoibríochta seo. " -"Chun idirshuíomh éascaithe a dhéanamh le [method lerp], déan é a " -"chomhcheangal le [method gan stró] nó le [method smoothstep]. Féach freisin " -"[remap modha] chun sraith leanúnach luachanna a mhapáil go ceann eile.\n" -"[b]Nóta:[/b] Ar mhaithe le sábháilteacht cineáil níos fearr, úsáid [method " -"lerpf], [method Vector2.lerp], [method Vector3.lerp], [method Vector4.lerp], " -"[method Color.lerp], [method Quaternion.slerp] nó [method Basis.slerp]." - msgid "" "Linearly interpolates between two angles (in radians) by a [param weight] " "value between 0.0 and 1.0.\n" @@ -2934,35 +2420,6 @@ msgstr "" "Chun idirshuíomh éascaithe a dhéanamh le [method lerp], déan é a " "chomhcheangal le [method gan stró] nó le [method smoothstep]." -msgid "" -"Converts from linear energy to decibels (audio). This can be used to " -"implement volume sliders that behave as expected (since volume isn't " -"linear).\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"# \"Slider\" refers to a node that inherits Range such as HSlider or " -"VSlider.\n" -"# Its range must be configured to go from 0 to 1.\n" -"# Change the bus name if you'd like to change the volume of a specific bus " -"only.\n" -"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), " -"linear_to_db($Slider.value))\n" -"[/codeblock]" -msgstr "" -"Athraíonn sé ó fhuinneamh líneach go ndeicibeilí (fuaime). Is féidir é seo a " -"úsáid chun Barraí Sleamhnáin toirte a iompar mar a bhíothas ag súil leis " -"(toisc nach bhfuil an toirt líneach).\n" -"[b]Sampla:[/b]\n" -"[codeblock]\n" -"# Tagraíonn \"Slider\" do nód a fhaigheann Raon mar HSlider nó VSlider mar " -"oidhreacht.\n" -"# Ní mór a raon a chumrú le dul ó 0 go 1.\n" -"# Athraigh ainm an bhus más maith leat toirt an bhus ar leith amháin a " -"athrú.\n" -"AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Máistir\"), " -"linear_to_db($Slider.value))\n" -"[/codeblock]" - msgid "" "Returns the [url=https://en.wikipedia.org/wiki/Natural_logarithm]natural " "logarithm[/url] of [param x] (base [url=https://en.wikipedia.org/wiki/" @@ -3235,129 +2692,6 @@ msgstr "" "pow(4, 1.5) # Filleann 8.0\n" "[/codeblock]" -msgid "" -"Converts one or more arguments of any type to string in the best way possible " -"and prints them to the console.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = [1, 2, 3]\n" -"print(\"a\", \"b\", a) # Prints ab[1, 2, 3]\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = new Godot.Collections.Array { 1, 2, 3 };\n" -"GD.Print(\"a\", \"b\", a); // Prints ab[1, 2, 3]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to " -"print error and warning messages instead of [method print] or [method " -"print_rich]. This distinguishes them from print messages used for debugging " -"purposes, while also displaying a stack trace when an error or warning is " -"printed." -msgstr "" -"Tiontaíonn sé argóint amháin nó níos mó d'aon chineál go teaghrán ar an " -"mbealach is fearr agus is féidir agus priontaí chuig an consól iad.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = [1, 2, 3]\n" -"print(\"a\", \"b\", a) # Priontála ab[1, 2, 3]\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = Godot.Collections nua.Array { 1, 2, 3 };\n" -"GD.Print (\"a\", \"b\", a); // Priontaí ab[1, 2, 3]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b] Nóta:[/b] Smaoinigh ar [method push_error] agus [method push_warning] a " -"úsáid chun teachtaireachtaí earráide agus rabhaidh a phriontáil in ionad " -"[method print] nó [method print_rich]. Déanann sé seo iad a idirdhealú ó " -"theachtaireachtaí priontála a úsáidtear chun críocha dífhabhtaithe, agus ag " -"an am céanna taispeánann rian cruachta nuair a phriontáiltear earráid nó " -"rabhadh." - -msgid "" -"Converts one or more arguments of any type to string in the best way possible " -"and prints them to the console.\n" -"The following BBCode tags are supported: [code]b[/code], [code]i[/code], " -"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], " -"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/" -"code], [code]bgcolor[/code], [code]fgcolor[/code].\n" -"Color tags only support the following named colors: [code]black[/code], " -"[code]red[/code], [code]green[/code], [code]yellow[/code], [code]blue[/code], " -"[code]magenta[/code], [code]pink[/code], [code]purple[/code], [code]cyan[/" -"code], [code]white[/code], [code]orange[/code], [code]gray[/code]. " -"Hexadecimal color codes are not supported.\n" -"URL tags only support URLs wrapped by a URL tag, not URLs with a different " -"title.\n" -"When printing to standard output, the supported subset of BBCode is converted " -"to ANSI escape codes for the terminal emulator to display. Support for ANSI " -"escape codes varies across terminal emulators, especially for italic and " -"strikethrough. In standard output, [code]code[/code] is represented with " -"faint text but without any font change. Unsupported tags are left as-is in " -"standard output.\n" -"[codeblocks]\n" -"[gdscript skip-lint]\n" -"print_rich(\"[color=green][b]Hello world![/b][/color]\") # Prints out \"Hello " -"world!\" in green with a bold font\n" -"[/gdscript]\n" -"[csharp skip-lint]\n" -"GD.PrintRich(\"[color=green][b]Hello world![/b][/color]\"); // Prints out " -"\"Hello world!\" in green with a bold font\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to " -"print error and warning messages instead of [method print] or [method " -"print_rich]. This distinguishes them from print messages used for debugging " -"purposes, while also displaying a stack trace when an error or warning is " -"printed.\n" -"[b]Note:[/b] On Windows, only Windows 10 and later correctly displays ANSI " -"escape codes in standard output.\n" -"[b]Note:[/b] Output displayed in the editor supports clickable [code skip-" -"lint][url=address]text[/url][/code] tags. The [code skip-lint][url][/code] " -"tag's [code]address[/code] value is handled by [method OS.shell_open] when " -"clicked." -msgstr "" -"Tiontaíonn sé argóint amháin nó níos mó d'aon chineál go teaghrán ar an " -"mbealach is fearr agus is féidir agus priontaí chuig an consól iad.\n" -"Tacaítear leis na clibeanna BBCode seo a leanas: [code]b[/code], [code]i[/" -"code], [code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/" -"code], [code]url[/code], [code]center[/code], [code]right[/code], " -"[code]color[/code], [code]bgcolor[/code], [code]fgcolor[/code].\n" -"Ní thacaíonn clibeanna datha ach leis na dathanna ainmnithe seo a leanas: " -"[code]black[/code], [code]red[/code], [code]green[/code], [code]yellow[/" -"code], [code]blue[/code], [code]magenta[/code], [code]pink[/code], " -"[code]purple[/code], [code]cyan[/code], [code]white[/code], [code]orange[/" -"code], [code]gray[/code]. Ní thacaítear le cóid datha heicsidheacha.\n" -"Ní thacaíonn clibeanna URL ach URLanna atá fillte le clib URL, ní URLanna le " -"teideal eile.\n" -"Nuair a phriontáiltear go dtí an t-aschur caighdeánach, déantar an fothacar " -"tacaithe de BBCode a thiontú go cóid éalaithe ANSI le go dtaispeánfaidh an " -"aithriseoir teirminéil. Athraíonn an tacaíocht do chóid éalaithe ANSI trasna " -"aithriseoir teirminéil, go háirithe le haghaidh cló iodálach agus stailc " -"tríd. In aschur caighdeánach, léirítear [code]code[/code] le téacs lag ach " -"gan aon athrú cló. Fágtar clibeanna gan tacaíocht mar atá san aschur " -"caighdeánach.\n" -"[codeblocks]\n" -"[gdscript skip-lint]\n" -"print_rich(\"[color=green][b]Hello world![/b][/color]\") # Priontálann sé " -"\"Dia duit ar domhan!\" i glas le cló trom\n" -"[/gdscript]\n" -"[csharp skip-lint]\n" -"GD.PrintRich(\"[color=green][b]Hello world![/b][/color]\"); // Priontaí amach " -"\"Dia duit ar domhan!\" i glas le cló trom\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b] Nóta:[/b] Smaoinigh ar [method push_error] agus [method push_warning] a " -"úsáid chun teachtaireachtaí earráide agus rabhaidh a phriontáil in ionad " -"[method print] nó [method print_rich]. Déanann sé seo iad a idirdhealú ó " -"theachtaireachtaí priontála a úsáidtear chun críocha dífhabhtaithe, agus ag " -"an am céanna taispeánann rian cruachta nuair a phriontáiltear earráid nó " -"rabhadh.\n" -"[b]Nóta:[/b] Ar Windows, ní thaispeánann ach Windows 10 agus níos déanaí cóid " -"éalaithe ANSI i gceart san aschur caighdeánach.\n" -"[b] Nóta:[/b] Tacaíonn an t-aschur a thaispeántar san eagarthóir le clibeanna " -"[code skip-lint][url= address]text[/url][/code] inchliceáilte. Láimhseálann " -"[method OS.shell_open] an luach [code skip-lint][url][/code] [code]address[/" -"code] nuair a chliceáiltear é." - msgid "" "If verbose mode is enabled ([method OS.is_stdout_verbose] returning " "[code]true[/code]), converts one or more arguments of any type to string in " @@ -3390,157 +2724,6 @@ msgstr "" "[/csharp]\n" "[/codeblocks]" -msgid "" -"Prints one or more arguments to strings in the best way possible to the OS " -"terminal. Unlike [method print], no newline is automatically added at the " -"end.\n" -"[b]Note:[/b] The OS terminal is [i]not[/i] the same as the editor's Output " -"dock. The output sent to the OS terminal can be seen when running Godot from " -"a terminal. On Windows, this requires using the [code]console.exe[/code] " -"executable.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printraw(\"A\")\n" -"printraw(\"B\")\n" -"printraw(\"C\")\n" -"# Prints ABC to terminal\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintRaw(\"A\");\n" -"GD.PrintRaw(\"B\");\n" -"GD.PrintRaw(\"C\");\n" -"// Prints ABC to terminal\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Priontálann argóint amháin nó níos mó go teaghráin ar an mbealach is fearr " -"agus is féidir chuig an teirminéal OS. Murab ionann agus [method print], ní " -"chuirtear aon líne nua leis go huathoibríoch ag an deireadh.\n" -"[b]Nóta:[/b] Níl an teirminéal OS [i][/i] mar an gcéanna le duga Aschuir an " -"eagarthóra. Is féidir an t-aschur a sheoltar chuig críochfort an OS a " -"fheiceáil agus Godot á rith ó chríochfort. Ar Windows, éilíonn sé seo úsáid a " -"bhaint as an [code]console.exe[/code] inrite.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printraw (\"A\")\n" -"printraw (\"B\")\n" -"printraw (\"C\")\n" -"# Priontálann ABC chuig an teirminéal\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintRaw(\"A\");\n" -"GD.PrintRaw(\"B\");\n" -"GD.PrintRaw(\"C\");\n" -"// Priontaí ABC go teirminéal\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Prints one or more arguments to the console with a space between each " -"argument.\n" -"[codeblocks]\n" -"[gdscript]\n" -"prints(\"A\", \"B\", \"C\") # Prints A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintS(\"A\", \"B\", \"C\"); // Prints A B C\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Priontálann argóint amháin nó níos mó chuig an consól le spás idir gach " -"argóint.\n" -"[codeblocks]\n" -"[gdscript]\n" -"priontaí (\"A\", \"B\", \"C\") # Priontaí A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintS (\"A\", \"B\", \"C\"); // Priontaí A B C\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Prints one or more arguments to the console with a tab between each " -"argument.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printt(\"A\", \"B\", \"C\") # Prints A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintT(\"A\", \"B\", \"C\"); // Prints A B C\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Priontálann argóint amháin nó níos mó chuig an consól le cluaisín idir gach " -"argóint.\n" -"[codeblocks]\n" -"[gdscript]\n" -"printt (\"A\", \"B\", \"C\") # Priontaí A B C\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PrintT (\"A\", \"B\", \"C\"); // Priontaí A B C\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Pushes an error message to Godot's built-in debugger and to the OS terminal.\n" -"[codeblocks]\n" -"[gdscript]\n" -"push_error(\"test error\") # Prints \"test error\" to debugger and terminal " -"as error call\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PushError(\"test error\"); // Prints \"test error\" to debugger and " -"terminal as error call\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] This function does not pause project execution. To print an " -"error message and pause project execution in debug builds, use " -"[code]assert(false, \"test error\")[/code] instead." -msgstr "" -"Cuireann sé teachtaireacht earráide chuig dífhabhtóir ionsuite Godot agus " -"chuig teirminéal an OS.\n" -"[codeblocks]\n" -"[gdscript]\n" -"push_error (\"earráid tástála\") # Priontálann \"earráid tástála\" chuig an " -"dífhabhtóir agus an teirminéal mar ghlao earráide\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PushError (\"earráid tástála\"); // Priontálann \"earráid tástála\" chuig " -"dífhabhtóir agus teirminéal mar ghlao earráide\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Ní chuireann an fheidhm seo feidhmiú an tionscadail ar sos. Chun " -"teachtaireacht earráide a phriontáil agus forghníomhú an tionscadail a chur " -"ar sos i dtógálacha dífhabhtaithe, úsáid [code] dearbhú (bréagach, \"earráid " -"tástála\")[/code] ina ionad sin." - -msgid "" -"Pushes a warning message to Godot's built-in debugger and to the OS " -"terminal.\n" -"[codeblocks]\n" -"[gdscript]\n" -"push_warning(\"test warning\") # Prints \"test warning\" to debugger and " -"terminal as warning call\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PushWarning(\"test warning\"); // Prints \"test warning\" to debugger and " -"terminal as warning call\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Cuireann sé teachtaireacht rabhaidh chuig dífhabhtóir ionsuite Godot agus " -"chuig críochfort an OS.\n" -"[codeblocks]\n" -"[gdscript]\n" -"push_warning(\"rabhadh tástála\") # Priontálann \"rabhadh tástála\" chuig an " -"dífhabhtóir agus an teirminéal mar ghlao rabhaidh\n" -"[/gdscript]\n" -"[csharp]\n" -"GD.PushWarning (\"rabhadh tástála\"); // Priontálann \"rabhadh tástála\" " -"chuig an dífhabhtóir agus an teirminéal mar ghlao rabhaidh\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Converts an angle expressed in radians to degrees.\n" "[codeblock]\n" @@ -3556,34 +2739,6 @@ msgstr "" "rad_to_deg(PI * 2) # Filleann 360\n" "[/codeblock]" -msgid "" -"Given a [param seed], returns a [PackedInt64Array] of size [code]2[/code], " -"where its first element is the randomized [int] value, and the second element " -"is the same as [param seed]. Passing the same [param seed] consistently " -"returns the same array.\n" -"[b]Note:[/b] \"Seed\" here refers to the internal state of the pseudo random " -"number generator, currently implemented as a 64 bit integer.\n" -"[codeblock]\n" -"var a = rand_from_seed(4)\n" -"\n" -"print(a[0])\t# Prints 2879024997\n" -"print(a[1])\t# Prints 4\n" -"[/codeblock]" -msgstr "" -"Nuair a thugtar [síol param], seolann sé [PackedInt64Array] de mhéid [code]2[/" -"code] ar ais, áit arb é an luach randamach [int] a chéad eilimint, agus go " -"bhfuil an dara eilimint mar an gcéanna le [síol param]. Nuair a théann an " -"[síol param] céanna ar ais go seasta ar ais an t-eagar céanna.\n" -"[b]Nóta:[/b] Tagraíonn \"síl\" anseo do staid inmheánach an ghineadóra " -"uimhreacha randamacha bréige, atá curtha i bhfeidhm faoi láthair mar " -"shlánuimhir 64 giotán.\n" -"[codeblock]\n" -"var a = rand_from_seed(4)\n" -"\n" -"priontáil(a[0]) # Priontála 2879024997\n" -"print(a[1]) # Priontála 4\n" -"[/codeblock]" - msgid "" "Returns a random floating-point value between [code]0.0[/code] and [code]1.0[/" "code] (inclusive).\n" @@ -3934,23 +3089,6 @@ msgstr "" "signf(NAN) # Fill ar ais 0.0\n" "[/codeblock]" -msgid "" -"Returns [code]-1[/code] if [param x] is negative, [code]1[/code] if [param x] " -"is positive, and [code]0[/code] if if [param x] is zero.\n" -"[codeblock]\n" -"signi(-6) # Returns -1\n" -"signi(0) # Returns 0\n" -"signi(6) # Returns 1\n" -"[/codeblock]" -msgstr "" -"Filleann sé [code]-1[/code] má tá [param x] diúltach, [code]1[/code] má tá " -"[param x] deimhneach, agus [code]0[/code] má tá [param x] nialas.\n" -"[codeblock]\n" -"signi(-6) # Filleann -1\n" -"signi(0) # Filleann 0\n" -"signi(6) # Fill ar ais 1\n" -"[/codeblock]" - msgid "" "Returns the sine of angle [param angle_rad] in radians.\n" "[codeblock]\n" @@ -3977,54 +3115,6 @@ msgstr "" "sinh(a) # Fill ar ais 0.75\n" "[/codeblock]" -msgid "" -"Returns the result of smoothly interpolating the value of [param x] between " -"[code]0[/code] and [code]1[/code], based on the where [param x] lies with " -"respect to the edges [param from] and [param to].\n" -"The return value is [code]0[/code] if [code]x <= from[/code], and [code]1[/" -"code] if [code]x >= to[/code]. If [param x] lies between [param from] and " -"[param to], the returned value follows an S-shaped curve that maps [param x] " -"between [code]0[/code] and [code]1[/code].\n" -"This S-shaped curve is the cubic Hermite interpolator, given by [code]f(y) = " -"3*y^2 - 2*y^3[/code] where [code]y = (x-from) / (to-from)[/code].\n" -"[codeblock]\n" -"smoothstep(0, 2, -5.0) # Returns 0.0\n" -"smoothstep(0, 2, 0.5) # Returns 0.15625\n" -"smoothstep(0, 2, 1.0) # Returns 0.5\n" -"smoothstep(0, 2, 2.0) # Returns 1.0\n" -"[/codeblock]\n" -"Compared to [method ease] with a curve value of [code]-1.6521[/code], [method " -"smoothstep] returns the smoothest possible curve with no sudden changes in " -"the derivative. If you need to perform more advanced transitions, use [Tween] " -"or [AnimationPlayer].\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, " -"-1.6521) return values[/url]" -msgstr "" -"Filleann sé an toradh ar luach [param x] a idirshuíomh go réidh idir [code]0[/" -"code] agus [code]1[/code], bunaithe ar an áit a luíonn [param x] maidir leis " -"na himill [param ó] agus [param go].\n" -"Is é an luach tuairisceáin ná [code]0[/code] más rud é [code] x <= ó[/code], " -"agus [code]1[/code] más [code] x >= go[/code] é. Má luíonn [param x] idir " -"[param ó] agus [param go], leanann an luach ar ais cuar S-chruthach a " -"mhapálann [param x] idir [code]0[/code] agus [code]1[/code] .\n" -"Is é an cuar S-chruthach seo an t-idirshuíomh Hermite ciúbach, tugtha ag " -"[code]f(y) = 3*y^2 - 2*y^3[/code] áit a bhfuil [code]y = (x-ó) / (chuig -ó)[/" -"code].\n" -"[codeblock]\n" -"smoothstep(0, 2, -5.0) # Filleann 0.0\n" -"smoothstep(0, 2, 0.5) # Fill ar ais 0. 15625\n" -"smoothstep(0, 2, 1. 0) # Filleann 0.5\n" -"smoothstep(0, 2, 2. 0) # Filleann 1.0\n" -"[/codeblock]\n" -"I gcomparáid le [method gan stró] a bhfuil luach cuar [code]-1.6521[/code] " -"aige, cuireann [method smoothstep] ar ais an cuar is míne agus is féidir gan " -"aon athruithe tobanna sa díorthach. Más gá duit aistrithe níos forbartha a " -"dhéanamh, úsáid [Tween] nó [AnimationPlayer].\n" -"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" -"smoothstep_ease_comparison.png]Comparáid idir smoothstep() agus luachanna " -"aischuir éasca(x, -1.6521)[/url]" - msgid "" "Returns the multiple of [param step] that is the closest to [param x]. This " "can also be used to round a floating-point number to an arbitrary number of " @@ -4252,52 +3342,6 @@ msgstr "" "type_convert(\"Haigh!\", TYPE_NIL) # Fill ar ais null\n" "[/codeblock]" -msgid "" -"Returns a human-readable name of the given [param type], using the [enum " -"Variant.Type] values.\n" -"[codeblock]\n" -"print(TYPE_INT) # Prints 2.\n" -"print(type_string(TYPE_INT)) # Prints \"int\".\n" -"print(type_string(TYPE_STRING)) # Prints \"String\".\n" -"[/codeblock]\n" -"See also [method typeof]." -msgstr "" -"Filleann sé ainm atá inléite ag an duine den [cineál param] tugtha, ag baint " -"úsáide as na luachanna [enum Variant.Type].\n" -"[codeblock]\n" -"priontáil(TYPE_INT) # Priontála 2.\n" -"print(type_string(TYPE_INT)) # Priontála \"int\".\n" -"print(type_string(TYPE_STRING)) # Priontála \"Teaghrán\".\n" -"[/codeblock]\n" -"Féach freisin [method cineál]." - -msgid "" -"Returns the internal type of the given [param variable], using the [enum " -"Variant.Type] values.\n" -"[codeblock]\n" -"var json = JSON.new()\n" -"json.parse('[\"a\", \"b\", \"c\"]')\n" -"var result = json.get_data()\n" -"if typeof(result) == TYPE_ARRAY:\n" -" print(result[0]) # Prints a\n" -"else:\n" -" print(\"Unexpected result\")\n" -"[/codeblock]\n" -"See also [method type_string]." -msgstr "" -"Filleann sé cineál inmheánach an [param athróg] tugtha, ag baint úsáide as na " -"luachanna [enum Variant.Type].\n" -"[codeblock]\n" -"var json = JSON.new()\n" -"json.parse('[\"a\", \"b\", \"c\"]')\n" -"var toradh = json.get_data()\n" -"má tá typeof(toradh) == TYPE_ARRAY:\n" -" print(toradh[0]) # Priontála a\n" -"eile:\n" -" print(\"Toradh gan choinne\")\n" -"[/codeblock]\n" -"Féach freisin [method type_string]." - msgid "" "Encodes a [Variant] value to a byte array, without encoding objects. " "Deserialization can be done with [method bytes_to_var].\n" @@ -5119,21 +4163,9 @@ msgstr "Eochair hyper. (Ar Linux/X11 amháin)." msgid "Help key." msgstr "Cabhair eochair." -msgid "" -"Media back key. Not to be confused with the Back button on an Android device." -msgstr "" -"Eochair meáin ar ais. Gan a bheith mearbhall leis an gcnaipe Ar Ais ar " -"fheiste Android." - -msgid "Media forward key." -msgstr "Eochair meáin ar aghaidh." - msgid "Media stop key." msgstr "Eochair stad meáin." -msgid "Media refresh key." -msgstr "Eochair athnuachana meáin." - msgid "Volume down key." msgstr "Eochair toirt síos." @@ -5242,51 +4274,6 @@ msgstr "Eochair anaithnid." msgid "Space key." msgstr "Eochair spáis." -msgid "! key." -msgstr "! eochair." - -msgid "\" key." -msgstr "\" eochair." - -msgid "# key." -msgstr "# eochair." - -msgid "$ key." -msgstr "$ eochair." - -msgid "% key." -msgstr "% eochair." - -msgid "& key." -msgstr "& eochair." - -msgid "' key." -msgstr "' eochair." - -msgid "( key." -msgstr "(eochair." - -msgid ") key." -msgstr ") eochair." - -msgid "* key." -msgstr "*eochair." - -msgid "+ key." -msgstr "+eochair." - -msgid ", key." -msgstr ", eochair." - -msgid "- key." -msgstr "- eochair." - -msgid ". key." -msgstr ". eochair." - -msgid "/ key." -msgstr "/eochair." - msgid "Number 0 key." msgstr "Uimhir 0 eochair." @@ -5317,27 +4304,6 @@ msgstr "Uimhir 8 eochair." msgid "Number 9 key." msgstr "Uimhir 9 eochair." -msgid ": key." -msgstr ": eochair." - -msgid "; key." -msgstr "; eochair." - -msgid "< key." -msgstr "< eochair." - -msgid "= key." -msgstr "= eochair." - -msgid "> key." -msgstr "> eochair." - -msgid "? key." -msgstr "? eochair." - -msgid "@ key." -msgstr "@eochair." - msgid "A key." msgstr "A eochair." @@ -5416,42 +4382,6 @@ msgstr "Y eochair." msgid "Z key." msgstr "Z eochair." -msgid "[ key." -msgstr "[eochair." - -msgid "\\ key." -msgstr "\\ eochair." - -msgid "] key." -msgstr "] eochair." - -msgid "^ key." -msgstr "^ eochair." - -msgid "_ key." -msgstr "_ eochair." - -msgid "` key." -msgstr "`eochair." - -msgid "{ key." -msgstr "{ eochair." - -msgid "| key." -msgstr "| eochair." - -msgid "} key." -msgstr "} eochair." - -msgid "~ key." -msgstr "~ eochair." - -msgid "¥ key." -msgstr "¥ eochair." - -msgid "§ key." -msgstr "§ eochair." - msgid "Key Code mask." msgstr "Masc eochair cód." @@ -5881,42 +4811,6 @@ msgstr "" "réamhshocraithe, amhail is dá mbeadh sé curtha ar siúl. Níor cheart é a " "sheoladh nuair a bhíonn an gléas MIDI á chur ar siúl." -msgid "" -"Methods that return [enum Error] return [constant OK] when no error " -"occurred.\n" -"Since [constant OK] has value 0, and all other error constants are positive " -"integers, it can also be used in boolean checks.\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"var error = method_that_returns_error()\n" -"if error != OK:\n" -" printerr(\"Failure!\")\n" -"\n" -"# Or, alternatively:\n" -"if error:\n" -" printerr(\"Still failing!\")\n" -"[/codeblock]\n" -"[b]Note:[/b] Many functions do not return an error code, but will print error " -"messages to standard output." -msgstr "" -"Filleann modhanna a fhilleann [enum Error] [constant OK] nuair nár tharla aon " -"earráid.\n" -"Ós rud é go bhfuil luach 0 ag [seasmhach OK], agus gur slánuimhreacha " -"dearfacha iad gach tairisigh earráide eile, is féidir é a úsáid freisin i " -"seiceálacha boolean.\n" -"[b]Sampla:[/b]\n" -"[codeblock]\n" -"earráid var = method_that_returns_error()\n" -"má tá earráid!= OK:\n" -" printéir (\"Teip!\")\n" -"\n" -"# Nó, mar mhalairt air sin:\n" -"má earráid:\n" -" printerr (\"Fós ag teip!\")\n" -"[/codeblock]\n" -"[b]Nóta:[/b] Ní chuireann go leor feidhmeanna cód earráide ar ais, ach " -"priontálfaidh siad teachtaireachtaí earráide chuig aschur caighdeánach." - msgid "Generic error." msgstr "Earráid ghinearálta." @@ -6318,180 +5212,6 @@ msgstr "" "Tugann le tuiscint gur réad atá ionchódaithe mar ID oibiachta é luach na " "maoine, agus a chineál sonraithe sa teaghrán leid. In úsáid ag an dífhabhtóir." -msgid "" -"If a property is [String], hints that the property represents a particular " -"type (class). This allows to select a type from the create dialog. The " -"property will store the selected type as a string.\n" -"If a property is [Array], hints the editor how to show elements. The " -"[code]hint_string[/code] must encode nested types using [code]\":\"[/code] " -"and [code]\"/\"[/code].\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Array of elem_type.\n" -"hint_string = \"%d:\" % [elem_type]\n" -"hint_string = \"%d/%d:%s\" % [elem_type, elem_hint, elem_hint_string]\n" -"# Two-dimensional array of elem_type (array of arrays of elem_type).\n" -"hint_string = \"%d:%d:\" % [TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d/%d:%s\" % [TYPE_ARRAY, elem_type, elem_hint, " -"elem_hint_string]\n" -"# Three-dimensional array of elem_type (array of arrays of arrays of " -"elem_type).\n" -"hint_string = \"%d:%d:%d:\" % [TYPE_ARRAY, TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d:%d/%d:%s\" % [TYPE_ARRAY, TYPE_ARRAY, elem_type, " -"elem_hint, elem_hint_string]\n" -"[/gdscript]\n" -"[csharp]\n" -"// Array of elemType.\n" -"hintString = $\"{elemType:D}:\";\n" -"hintString = $\"{elemType:}/{elemHint:D}:{elemHintString}\";\n" -"// Two-dimensional array of elemType (array of arrays of elemType).\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}:\";\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}/{elemHint:D}:" -"{elemHintString}\";\n" -"// Three-dimensional array of elemType (array of arrays of arrays of " -"elemType).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}:" -"\";\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}/" -"{elemHint:D}:{elemHintString}\";\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Examples:\n" -"[codeblocks]\n" -"[gdscript]\n" -"hint_string = \"%d:\" % [TYPE_INT] # Array of integers.\n" -"hint_string = \"%d/%d:1,10,1\" % [TYPE_INT, PROPERTY_HINT_RANGE] # Array of " -"integers (in range from 1 to 10).\n" -"hint_string = \"%d/%d:Zero,One,Two\" % [TYPE_INT, PROPERTY_HINT_ENUM] # Array " -"of integers (an enum).\n" -"hint_string = \"%d/%d:Zero,One,Three:3,Six:6\" % [TYPE_INT, " -"PROPERTY_HINT_ENUM] # Array of integers (an enum).\n" -"hint_string = \"%d/%d:*.png\" % [TYPE_STRING, PROPERTY_HINT_FILE] # Array of " -"strings (file paths).\n" -"hint_string = \"%d/%d:Texture2D\" % [TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Array of textures.\n" -"\n" -"hint_string = \"%d:%d:\" % [TYPE_ARRAY, TYPE_FLOAT] # Two-dimensional array " -"of floats.\n" -"hint_string = \"%d:%d/%d:\" % [TYPE_ARRAY, TYPE_STRING, " -"PROPERTY_HINT_MULTILINE_TEXT] # Two-dimensional array of multiline strings.\n" -"hint_string = \"%d:%d/%d:-1,1,0.1\" % [TYPE_ARRAY, TYPE_FLOAT, " -"PROPERTY_HINT_RANGE] # Two-dimensional array of floats (in range from -1 to " -"1).\n" -"hint_string = \"%d:%d/%d:Texture2D\" % [TYPE_ARRAY, TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Two-dimensional array of textures.\n" -"[/gdscript]\n" -"[csharp]\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Range:D}:1,10,1\"; // " -"Array of integers (in range from 1 to 10).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Two\"; // " -"Array of integers (an enum).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Three:3," -"Six:6\"; // Array of integers (an enum).\n" -"hintString = $\"{Variant.Type.String:D}/{PropertyHint.File:D}:*.png\"; // " -"Array of strings (file paths).\n" -"hintString = $\"{Variant.Type.Object:D}/{PropertyHint.ResourceType:D}:" -"Texture2D\"; // Array of textures.\n" -"\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}:\"; // Two-" -"dimensional array of floats.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.String:D}/{PropertyHint." -"MultilineText:D}:\"; // Two-dimensional array of multiline strings.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}/{PropertyHint." -"Range:D}:-1,1,0.1\"; // Two-dimensional array of floats (in range from -1 to " -"1).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Object:D}/{PropertyHint." -"ResourceType:D}:Texture2D\"; // Two-dimensional array of textures.\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] The trailing colon is required for properly detecting built-in " -"types." -msgstr "" -"Más airí [Teaghrán] í, tugann le tuiscint go seasann an t-airí do chineál " -"(aicme) ar leith. Ligeann sé seo cineál a roghnú ón dialóg cruthaigh. " -"Stórálfaidh an mhaoin an cineál roghnaithe mar theaghrán.\n" -"Más airí é [Eagar], leideanna don eagarthóir conas eilimintí a thaispeáint. " -"Ní mór don [code]hint_string[/code] cineálacha neadaithe a ionchódú trí úsáid " -"a bhaint as [code]\":\"[/code] agus [code]\"/\"[/code].\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Eagrán de chineál elem_.\n" -"hint_string = \"%d:\" %[elem_type]\n" -"hint_string = \"%d/%d: %s\" %[elem_type, elem_hint, elem_hint_string]\n" -"# Sraith dhéthoiseach de elem_type (eagar eagair de elem_type).\n" -"hint_string = \"%d:%d:\" %[TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d: %d/%d: %s\" %[TYPE_ARRAY, elem_type, elem_hint, " -"elem_hint_string]\n" -"# Sraith tríthoiseach de elem_type (eagar eagair de elem_type).\n" -"hint_string = \"%d:%d:%d:\" %[TYPE_ARRAY, TYPE_ARRAY, elem_type]\n" -"hint_string = \"%d:%d:%d/%d:%s\" %[TYPE_ARRAY, TYPE_ARRAY, elem_type, " -"elem_hint, elem_hint_string]\n" -"[/gdscript]\n" -"[csharp]\n" -"// Eagrán elemType.\n" -"hintString = $ \"{elemType:D}:\";\n" -"hintString = $ \"{elemType:}/{elemHint:D}:{elemHintString}\";\n" -"// Eagar déthoiseach de chineál elem (eagar eagair de elemType).\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}:\";\n" -"hintString = $\"{Variant.Type.Array:D}:{elemType:D}/{elemHint:D}:" -"{elemHintString}\";\n" -"// Eagar tríthoiseach de chineál elem (eagar eagair de chineál elemType).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}:" -"\";\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Array:D}:{elemType:D}/" -"{elemHint:D}:{elemHintString}\";\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Samplaí:\n" -"[codeblocks]\n" -"[gdscript]\n" -"hint_string = \"%d:\" %[TYPE_INT] # Array of integers.\n" -"hint_string = \"%d/%d:1,10,1\" %[TYPE_INT, PROPERTY_HINT_RANGE] # Eagar " -"slánuimhreacha (sa raon ó 1 go 10).\n" -"hint_string = \"%d/%d: Nialais,Aon,Dhá\" %[TYPE_INT, PROPERTY_HINT_ENUM] # " -"Eagar slánuimhreacha (enum).\n" -"hint_string = \"%d/%d: Nialais,A hAon,Trí:3,Sé:6\" %[TYPE_INT, " -"PROPERTY_HINT_ENUM] # Eagar slánuimhreacha (enum).\n" -"hint_string = \"%d/%d:*.png\" %[TYPE_STRING, PROPERTY_HINT_FILE] # Eagar " -"teaghrán (conairí comhaid).\n" -"hint_string = \"%d/%d:Uigeacht2D\" %[TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Eagar uigeachtaí.\n" -"\n" -"hint_string = \"%d:%d:\" %[TYPE_ARRAY, TYPE_FLOAT] # Sraith dhéthoiseach de " -"shnámhóga.\n" -"hint_string = \"%d:%d/%d:\" %[TYPE_ARRAY, TYPE_STRING, " -"PROPERTY_HINT_MULTILINE_TEXT] # Sraith dhéthoiseach de theaghráin illíne.\n" -"hint_string = \"%d:%d/%d:-1,1,0.1\" %[TYPE_ARRAY, TYPE_FLOAT, " -"PROPERTY_HINT_RANGE] # Sraith dháthoiseach snámhán (sa raon ó -1 go 1).\n" -"hint_string = \"%d:%d/%d:Uigeacht2D\" %[TYPE_ARRAY, TYPE_OBJECT, " -"PROPERTY_HINT_RESOURCE_TYPE] # Eagar déthoiseach uigeachtaí.\n" -"[/gdscript]\n" -"[csharp]\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Range:D}:1,10,1\"; // " -"Sraith slánuimhreacha (sa raon ó 1 go 10).\n" -"hintString = $\"{Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One, " -"Two\"; // Sraith slánuimhreacha (enum).\n" -"hintString = $\"{ Variant.Type.Int:D}/{PropertyHint.Enum:D}:Zero,One,Trí:3," -"Sé:6\"; // Sraith slánuimhreacha (enum).\n" -"hintString = $\"{Variant.Type.String:D}/{PropertyHint.File:D}:*.png\"; // " -"Sraith teaghráin (cosáin comhaid).\n" -"hintString = $\"{Variant.Type.Object:D}/{PropertyHint.ResourceType:D}:" -"Texture2D\"; // Eagar uigeachtaí.\n" -"\n" -"hintString = $ \"{Variant.Type.Array:D}:{Variant.Type.Float:D}:\"; // Sraith " -"de shnámhóga déthoiseacha.\n" -"hintString = $ \"{Variant.Type.Array:D}:{Variant.Type.String:D}/{PropertyHint." -"MultilineText:D}:\"; // Sraith dhéthoiseach de theaghráin illíne.\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Float:D}/{PropertyHint." -"Range:D}:-1,1,0.1\"; // Sraith de shnámhóga déthoiseacha (sa raon ó -1 go " -"1).\n" -"hintString = $\"{Variant.Type.Array:D}:{Variant.Type.Object:D}/{PropertyHint." -"ResourceType:D}:Texture2D\"; // Eagar déthoiseach uigeachtaí.\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Tá an idirstad rianaithe ag teastáil chun cineálacha ionsuite a " -"bhrath i gceart." - msgid "This hint is not used by the engine." msgstr "Ní úsáideann an t-inneall an leid seo." @@ -6642,13 +5362,6 @@ msgstr "" "Spreagann eagarthóireacht na maoine an t-úsáideoir chun an t-eagarthóir a " "atosú." -msgid "" -"The property is a script variable which should be serialized and saved in the " -"scene file." -msgstr "" -"Athróg scripte is ea an t-airí agus ba cheart é a shraithiú agus a shábháil " -"sa chomhad radhairc." - msgid "" "The property value of type [Object] will be stored even if its value is " "[code]null[/code]." @@ -6662,13 +5375,6 @@ msgstr "" msgid "This flag is not used by the engine." msgstr "Ní úsáideann an t-inneall an bhratach seo." -msgid "" -"The property is an enum, i.e. it only takes named integer constants from its " -"associated enumeration." -msgstr "" -"Is éanum é an t-airí, i.e. ní thógann sé ach tairisigh slánuimhir ainmnithe " -"óna áireamhacht ghaolmhar." - msgid "" "If property has [code]nil[/code] as default value, its type will be [Variant]." msgstr "" @@ -7046,48 +5752,6 @@ msgstr "Tógtar [AABB] mar chóip den [AABB] tugtha." msgid "Constructs an [AABB] by [param position] and [param size]." msgstr "Tógann sé [AABB] de réir [suíomh param] agus [param size]." -msgid "" -"Returns an [AABB] equivalent to this bounding box, with its width, height, " -"and depth modified to be non-negative values.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(5, 0, 5), Vector3(-20, -10, -5))\n" -"var absolute = box.abs()\n" -"print(absolute.position) # Prints (-15, -10, 0)\n" -"print(absolute.size) # Prints (20, 10, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(5, 0, 5), new Vector3(-20, -10, -5));\n" -"var absolute = box.Abs();\n" -"GD.Print(absolute.Position); // Prints (-15, -10, 0)\n" -"GD.Print(absolute.Size); // Prints (20, 10, 5)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] It's recommended to use this method when [member size] is " -"negative, as most other methods in Godot assume that the [member size]'s " -"components are greater than [code]0[/code]." -msgstr "" -"Filleann sé [AABB] atá coibhéiseach leis an mbosca teorann seo, agus " -"athraítear a leithead, a airde agus a dhoimhneacht chun bheith ina luachanna " -"neamhdhiúltacha.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(5, 0, 5), Vector3(-20, -10, -5))\n" -"var absalóideach = box.abs()\n" -"cló (suíomh.suíomh iomlán) # Priontála (-15, -10, 0)\n" -"print(size.size) # Priontála (20, 10, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = Aabb nua(Veicteoir nua3(5, 0, 5), Veicteoir nua3(-20, -10, -5));\n" -"var absalóideach = bosca.Abs();\n" -"GD.Print(iomlán.Seasamh); // Priontaí (-15, -10, 0)\n" -"GD.Print(iomlán.Méid); // Priontaí (20, 10, 5)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Moltar an modh seo a úsáid nuair a bhíonn [méid na mball] " -"diúltach, mar go nglactar leis go bhfuil formhór na modhanna eile in Godot " -"níos mó ná [code]0[/code] ." - msgid "" "Returns [code]true[/code] if this bounding box [i]completely[/i] encloses the " "[param with] box. The edges of both boxes are included.\n" @@ -7135,61 +5799,6 @@ msgstr "" "[/csharp]\n" "[/codeblocks]" -msgid "" -"Returns a copy of this bounding box expanded to align the edges with the " -"given [param to_point], if necessary.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(5, 2, 5))\n" -"\n" -"box = box.expand(Vector3(10, 0, 0))\n" -"print(box.position) # Prints (0, 0, 0)\n" -"print(box.size) # Prints (10, 2, 5)\n" -"\n" -"box = box.expand(Vector3(-5, 0, 5))\n" -"print(box.position) # Prints (-5, 0, 0)\n" -"print(box.size) # Prints (15, 2, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(5, 2, 5));\n" -"\n" -"box = box.Expand(new Vector3(10, 0, 0));\n" -"GD.Print(box.Position); // Prints (0, 0, 0)\n" -"GD.Print(box.Size); // Prints (10, 2, 5)\n" -"\n" -"box = box.Expand(new Vector3(-5, 0, 5));\n" -"GD.Print(box.Position); // Prints (-5, 0, 0)\n" -"GD.Print(box.Size); // Prints (15, 2, 5)\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Filleann sé seo cóip den bhosca teorann seo leathnaithe chun na himill a " -"ailíniú leis an [param to_point] a thugtar, más gá.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(5, 2, 5))\n" -"\n" -"bosca = box.expand(Vector3(10, 0, 0))\n" -"print(box.position) # Priontála (0, 0, 0)\n" -"print(box.size) # Priontála (10, 2, 5)\n" -"\n" -"bosca = box.expand(Vector3(-5, 0, 5))\n" -"print(box.position) # Priontála (-5, 0, 0)\n" -"print(box.size) # Priontála (15, 2, 5)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = Aabb nua(Veicteoir nua3(0, 0, 0), Veicteoir nua3(5, 2, 5));\n" -"\n" -"bosca = box.Expand(Vector3(10, 0, 0) nua);\n" -"GD.Print(bosca.Position); // Priontaí (0, 0, 0)\n" -"GD.Print(bosca.Méid); // Priontaí (10, 2, 5)\n" -"\n" -"bosca = box.Expand(Veicteoir nua3(-5, 0, 5));\n" -"GD.Print(bosca.Position); // Priontaí (-5, 0, 0)\n" -"GD.Print(bosca.Méid); // Priontaí (15, 2, 5)\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns the center point of the bounding box. This is the same as " "[code]position + (size / 2.0)[/code]." @@ -7207,50 +5816,6 @@ msgstr "" "mball], agus tá [param idx] de [code]7[/code] mar an gcéanna le [deireadh na " "mball]." -msgid "" -"Returns the longest normalized axis of this bounding box's [member size], as " -"a [Vector3] ([constant Vector3.RIGHT], [constant Vector3.UP], or [constant " -"Vector3.BACK]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))\n" -"\n" -"print(box.get_longest_axis()) # Prints (0, 0, 1)\n" -"print(box.get_longest_axis_index()) # Prints 2\n" -"print(box.get_longest_axis_size()) # Prints 8\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(2, 4, 8));\n" -"\n" -"GD.Print(box.GetLongestAxis()); // Prints (0, 0, 1)\n" -"GD.Print(box.GetLongestAxisIndex()); // Prints 2\n" -"GD.Print(box.GetLongestAxisSize()); // Prints 8\n" -"[/csharp]\n" -"[/codeblocks]\n" -"See also [method get_longest_axis_index] and [method get_longest_axis_size]." -msgstr "" -"Filleann sé seo ar ais an ais normalaithe is faide de [méide ball] an bhosca " -"teorann seo, mar [Vector3] ([Vector3.RIGHT seasmhach], [Vector3.UP " -"seasmhach], nó [Vector3.BACK tairiseach]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))\n" -"\n" -"print(box.get_longest_axis()) # Priontála (0, 0, 1)\n" -"print(box.get_longest_axis_index()) # Priontála 2\n" -"print(box.get_longest_axis_size()) # Priontála 8\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = Aabb nua(Veicteoir nua3(0, 0, 0), Veicteoir nua3(2, 4, 8));\n" -"\n" -"GD.Print(bosca.GetLongestAxis()); // Priontaí (0, 0, 1)\n" -"GD.Print(bosca.GetLongestAxisIndex()); // Priontaí 2\n" -"GD.Print(bosca.GetLongestAxisSize()); // Priontaí 8\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Féach freisin [method get_longest_axis_index] agus [method " -"get_longest_axis_size]." - msgid "" "Returns the index to the longest axis of this bounding box's [member size] " "(see [constant Vector3.AXIS_X], [constant Vector3.AXIS_Y], and [constant " @@ -7269,50 +5834,6 @@ msgstr "" "Filleann sé seo an toise is faide de [méid an bhosca teorann] seo.\n" "Mar shampla, féach [method get_longest_axis]." -msgid "" -"Returns the shortest normalized axis of this bounding box's [member size], as " -"a [Vector3] ([constant Vector3.RIGHT], [constant Vector3.UP], or [constant " -"Vector3.BACK]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))\n" -"\n" -"print(box.get_shortest_axis()) # Prints (1, 0, 0)\n" -"print(box.get_shortest_axis_index()) # Prints 0\n" -"print(box.get_shortest_axis_size()) # Prints 2\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = new Aabb(new Vector3(0, 0, 0), new Vector3(2, 4, 8));\n" -"\n" -"GD.Print(box.GetShortestAxis()); // Prints (1, 0, 0)\n" -"GD.Print(box.GetShortestAxisIndex()); // Prints 0\n" -"GD.Print(box.GetShortestAxisSize()); // Prints 2\n" -"[/csharp]\n" -"[/codeblocks]\n" -"See also [method get_shortest_axis_index] and [method get_shortest_axis_size]." -msgstr "" -"Filleann sé seo ar ais an ais normalaithe is giorra de [méide ball] an bhosca " -"teorann seo, mar [Vector3] ([Vector3.RIGHT seasmhach], [Vector3.UP " -"seasmhach], nó [Vector3.BACK leanúnach]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))\n" -"\n" -"print(box.get_shortest_axis()) # Priontála (1, 0, 0)\n" -"print(box.get_shortest_axis_index()) # Priontála 0\n" -"print(box.get_shortest_axis_size()) # Priontála 2\n" -"[/gdscript]\n" -"[csharp]\n" -"var box = Aabb nua(Veicteoir nua3(0, 0, 0), Veicteoir nua3(2, 4, 8));\n" -"\n" -"GD.Print(bosca.GetShortestAxis()); // Priontaí (1, 0, 0)\n" -"GD.Print(bosca.GetShortestAxisIndex()); // Priontaí 0\n" -"GD.Print(bosca.GetShortestAxisSize()); // Priontaí 2\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Féach freisin [method get_shortest_axis_index] agus [method " -"get_shortest_axis_size]." - msgid "" "Returns the index to the shortest axis of this bounding box's [member size] " "(see [constant Vector3.AXIS_X], [constant Vector3.AXIS_Y], and [constant " @@ -7346,53 +5867,6 @@ msgstr "" "Filleann sé toirt an bhosca teorann. Tá sé seo comhionann le [code]size.x * " "size.y * size.z[/code]. Féach freisin [method has_volume]." -msgid "" -"Returns a copy of this bounding box extended on all sides by the given amount " -"[param by]. A negative amount shrinks the box instead.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = AABB(Vector3(4, 4, 4), Vector3(8, 8, 8)).grow(4)\n" -"print(a.position) # Prints (0, 0, 0)\n" -"print(a.size) # Prints (16, 16, 16)\n" -"\n" -"var b = AABB(Vector3(0, 0, 0), Vector3(8, 4, 2)).grow(2)\n" -"print(b.position) # Prints (-2, -2, -2)\n" -"print(b.size) # Prints (12, 8, 6)\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = new Aabb(new Vector3(4, 4, 4), new Vector3(8, 8, 8)).Grow(4);\n" -"GD.Print(a.Position); // Prints (0, 0, 0)\n" -"GD.Print(a.Size); // Prints (16, 16, 16)\n" -"\n" -"var b = new Aabb(new Vector3(0, 0, 0), new Vector3(8, 4, 2)).Grow(2);\n" -"GD.Print(b.Position); // Prints (-2, -2, -2)\n" -"GD.Print(b.Size); // Prints (12, 8, 6)\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Seol ar ais cóip den bhosca teorann seo arna shíneadh ar gach taobh faoin " -"méid tugtha [param le]. Laghdaíonn méid diúltach an bosca ina ionad.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var a = AABB(Vector3(4, 4, 4), Veicteoir3(8, 8, 8)). fás(4)\n" -"print(a.position) # Priontála (0, 0, 0)\n" -"prionta(a.size) # Priontála (16, 16, 16)\n" -"\n" -"var b = AABB(Vector3(0, 0, 0), Veicteoir3(8, 4, 2)).fás(2)\n" -"cló(b.suíomh) # Priontála (-2, -2, -2)\n" -"prionta(b.size) # Priontála (12, 8, 6)\n" -"[/gdscript]\n" -"[csharp]\n" -"var a = Aabb nua(Veicteoir nua3(4, 4, 4), Veicteoir nua3(8, 8, 8)).Fás(4);\n" -"GD.Print(a.Seasamh); // Priontaí (0, 0, 0)\n" -"GD.Print(a.Méid); // Priontaí (16, 16, 16)\n" -"\n" -"var b = Aabb nua(Veicteoir nua3(0, 0, 0), Veicteoir nua3(8, 4, 2)).Fás(2);\n" -"GD.Print(b.Seasamh); // Priontaí (-2, -2, -2)\n" -"GD.Print(b.Méid); // Priontaí (12, 8, 6)\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns [code]true[/code] if the bounding box contains the given [param " "point]. By convention, points exactly on the right, top, and front sides are " @@ -7423,57 +5897,6 @@ msgstr "" "Filleann sé [code]true[/code] má tá leithead, airde agus doimhneacht an " "bhosca teorann seo go léir dearfach. Féach freisin [method get_volume]." -msgid "" -"Returns the intersection between this bounding box and [param with]. If the " -"boxes do not intersect, returns an empty [AABB]. If the boxes intersect at " -"the edge, returns a flat [AABB] with no volume (see [method has_surface] and " -"[method has_volume]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box1 = AABB(Vector3(0, 0, 0), Vector3(5, 2, 8))\n" -"var box2 = AABB(Vector3(2, 0, 2), Vector3(8, 4, 4))\n" -"\n" -"var intersection = box1.intersection(box2)\n" -"print(intersection.position) # Prints (2, 0, 2)\n" -"print(intersection.size) # Prints (3, 2, 4)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box1 = new Aabb(new Vector3(0, 0, 0), new Vector3(5, 2, 8));\n" -"var box2 = new Aabb(new Vector3(2, 0, 2), new Vector3(8, 4, 4));\n" -"\n" -"var intersection = box1.Intersection(box2);\n" -"GD.Print(intersection.Position); // Prints (2, 0, 2)\n" -"GD.Print(intersection.Size); // Prints (3, 2, 4)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] If you only need to know whether two bounding boxes are " -"intersecting, use [method intersects], instead." -msgstr "" -"Filleann sé an crosbhealach idir an bosca teorann seo agus [param le]. Mura " -"dtrasnaíonn na boscaí, seol ar ais [AABB] folamh. Má thrasnaíonn na boscaí ag " -"an imeall, filleann sé árasán [AABB] gan toirt (féach [method has_surface] " -"agus [method has_volume]).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var box1 = AABB(Vector3(0, 0, 0), Veicteoir3(5, 2, 8))\n" -"var box2 = AABB(Veicteoir3(2, 0, 2), Veicteoir3(8, 4, 4))\n" -"\n" -"crosbhealach var = bosca1.trasnaíonn(bosca2)\n" -"cló (trasnaíonn.suíomh) # Priontála (2, 0, 2)\n" -"print(intersection.size) # Priontála (3, 2, 4)\n" -"[/gdscript]\n" -"[csharp]\n" -"var box1 = Aabb nua(Veicteoir nua3(0, 0, 0), Veicteoir nua3(5, 2, 8));\n" -"var box2 = Aabb nua(Veicteoir nua3(2, 0, 2), Veicteoir nua3(8, 4, 4));\n" -"\n" -"var dtrasnaíonn = box1.Trasnaíonn(bosca2);\n" -"GD.Print(trasnaíonn.Seasamh); // Priontaí (2, 0, 2)\n" -"GD.Print(trasnaíonn.Méid); // Priontaí (3, 2, 4)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Más rud é nach gá duit ach fios a bheith agat an bhfuil dhá " -"bhosca teorann trasnaithe, úsáid [trasnaíonn an modh], ina ionad sin." - msgid "" "Returns [code]true[/code] if this bounding box overlaps with the box [param " "with]. The edges of both boxes are [i]always[/i] excluded." @@ -7510,24 +5933,6 @@ msgstr "" "code] ar ais.\n" "Tosaíonn an mhír ag [param ó] agus críochnaíonn sé ag [param go]." -msgid "" -"Returns [code]true[/code] if this bounding box and [param aabb] are " -"approximately equal, by calling [method Vector2.is_equal_approx] on the " -"[member position] and the [member size]." -msgstr "" -"Seoltar ar ais [code]true[/code] má tá an bosca teorann seo agus [param aabb] " -"a bheag nó a mhór comhionann, trí ghlaoch a chur ar [method Vector2." -"is_equal_approx] ar [suíomh na mball] agus ar an [méid na mball]." - -msgid "" -"Returns [code]true[/code] if this bounding box's values are finite, by " -"calling [method Vector2.is_finite] on the [member position] and the [member " -"size]." -msgstr "" -"Filleann sé [code]true[/code] má tá luachanna an bhosca teorann seo teoranta, " -"trí ghlaoch a chur ar [method Vector2.is_finite] ar an [suíomh ball] agus ar " -"an [méid na mball]." - msgid "" "Returns an [AABB] that encloses both this bounding box and [param with] " "around the edges. See also [method encloses]." @@ -7535,40 +5940,6 @@ msgstr "" "Filleann sé [AABB] a chuireann an bosca teorann seo agus [param with] " "timpeall ar na himill. Féach freisin [tá an modh iniata]." -msgid "" -"The ending point. This is usually the corner on the top-right and forward of " -"the bounding box, and is equivalent to [code]position + size[/code]. Setting " -"this point affects the [member size]." -msgstr "" -"An pointe deiridh. Is gnách gurb é seo an cúinne ar bharr ar dheis agus ar " -"aghaidh an bhosca teorann, agus tá sé comhionann le [code]suíomh + méid[/" -"code]. Bíonn tionchar ag socrú an phointe seo ar [méid na mball]." - -msgid "" -"The origin point. This is usually the corner on the bottom-left and back of " -"the bounding box." -msgstr "" -"An pointe tionscnaimh. Is gnách gurb é seo an cúinne ar thaobh na láimhe clé " -"agus ar chúl an bhosca teorann." - -msgid "" -"The bounding box's width, height, and depth starting from [member position]. " -"Setting this value also affects the [member end] point.\n" -"[b]Note:[/b] It's recommended setting the width, height, and depth to non-" -"negative values. This is because most methods in Godot assume that the " -"[member position] is the bottom-left-back corner, and the [member end] is the " -"top-right-forward corner. To get an equivalent bounding box with non-negative " -"size, use [method abs]." -msgstr "" -"Leithead, airde agus doimhneacht an bhosca teorann ag tosú ó [suíomh na " -"mball]. Cuireann socrú an luacha seo isteach ar an bpointe [deireadh na " -"mball] freisin.\n" -"[b]Nóta:[/b] Moltar an leithead, an airde agus an doimhneacht a shocrú go " -"luachanna neamhdhiúltacha. Tá sé seo toisc go nglacann an chuid is mó de na " -"modhanna i Godot leis gurb é [suíomh na mball] an cúinne bun-chlé, agus is é " -"[deireadh na mball] an cúinne uachtarach ar dheis ar aghaidh. Chun bosca " -"teorann coibhéiseach a fháil le méid neamhdhiúltach, úsáid [method ABS]." - msgid "" "Returns [code]true[/code] if the [member position] or [member size] of both " "bounding boxes are not equal.\n" @@ -8172,37 +6543,6 @@ msgstr "" "[code]custom_speed = -1.0[/code] agus [code]from_end = true[/code], mar sin " "féach ar a chur síos le haghaidh tuilleadh faisnéise." -msgid "" -"The setter of [member frame] resets the [member frame_progress] to [code]0.0[/" -"code] implicitly, but this method avoids that.\n" -"This is useful when you want to carry over the current [member " -"frame_progress] to another [member frame].\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Change the animation with keeping the frame index and progress.\n" -"var current_frame = animated_sprite.get_frame()\n" -"var current_progress = animated_sprite.get_frame_progress()\n" -"animated_sprite.play(\"walk_another_skin\")\n" -"animated_sprite.set_frame_and_progress(current_frame, current_progress)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Athshocraíonn socraitheoir [member frame] an [member frame_progress] go " -"[code]0.0[/code] go hintuigthe, ach seachnaíonn an modh seo é sin.\n" -"Tá sé seo úsáideach nuair is mian leat an sruth [member frame_progress] a " -"thabhairt anonn go [member frame] eile.\n" -"[b]Sampla:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Athraigh an bheochan agus coinnigh an t-innéacs fráma agus dul chun cinn.\n" -"var current_frame = beoite_sprite.get_frame()\n" -"var current_progress = beoite_sprite.get_frame_progress()\n" -"anime_sprite.play (\"siúl_craiceann_eile\")\n" -"animation_sprite.set_frame_and_progress(current_frame, current_progress)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Stops the currently playing animation. The animation position is reset to " "[code]0[/code] and the [code]custom_speed[/code] is reset to [code]1.0[/" @@ -9361,139 +7701,6 @@ msgstr "Filleann sé liosta na n-eochracha leabharlainne stóráilte." msgid "Returns the list of stored animation keys." msgstr "Filleann sé liosta na n-eochracha beochana stóráilte." -msgid "" -"Retrieve the motion delta of position with the [member root_motion_track] as " -"a [Vector3] that can be used elsewhere.\n" -"If [member root_motion_track] is not a path to a track of type [constant " -"Animation.TYPE_POSITION_3D], returns [code]Vector3(0, 0, 0)[/code].\n" -"See also [member root_motion_track] and [RootMotionView].\n" -"The most basic example is applying position to [CharacterBody3D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var current_rotation: Quaternion\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" current_rotation = get_quaternion()\n" -" state_machine.travel(\"Animate\")\n" -" var velocity: Vector3 = current_rotation * animation_tree." -"get_root_motion_position() / delta\n" -" set_velocity(velocity)\n" -" move_and_slide()\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"By using this in combination with [method " -"get_root_motion_rotation_accumulator], you can apply the root motion position " -"more correctly to account for the rotation of the node.\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" set_quaternion(get_quaternion() * animation_tree." -"get_root_motion_rotation())\n" -" var velocity: Vector3 = (animation_tree." -"get_root_motion_rotation_accumulator().inverse() * get_quaternion()) * " -"animation_tree.get_root_motion_position() / delta\n" -" set_velocity(velocity)\n" -" move_and_slide()\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Aisghabh deilte an tsuímh gluaisne leis an [member root_motion_track] mar " -"[Vector3] is féidir a úsáid in aon áit eile.\n" -"Mura cosán é [member root_motion_track] chuig rian cineáil [Beochan leanúnach." -"TYPE_POSITION_3D], filleann [code]Vector3(0, 0, 0)[/code].\n" -"Féach freisin [member root_motion_track] agus [RootMotionView].\n" -"Is é an sampla is bunúsaí ná suíomh a chur i bhfeidhm ar [CharacterBody3D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var current_rotation: Ceathrún\n" -"\n" -"feidhm _process(deil):\n" -" má tá Input.is_action_just_pressed(\"beochan\"):\n" -" current_rotation = get_quaternion()\n" -" state_machine.travel (\"Beochan\")\n" -" treoluas var: Vector3 = current_rotation * animation_tree." -"get_root_motion_position() / deilt\n" -" set_velocity(treoluas)\n" -" bog_agus_sleamhnán()\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"Trí é seo a úsáid i gcomhcheangal le [method " -"get_root_motion_rotation_accumulator], is féidir leat an suíomh tairiscint " -"fréimhe a chur i bhfeidhm ar bhealach níos cruinne chun cuntas a thabhairt ar " -"rothlú an nód.\n" -"[codeblocks]\n" -"[gdscript]\n" -"feidhm _process(deil):\n" -" má tá Input.is_action_just_pressed(\"beochan\"):\n" -" state_machine.travel (\"Beochan\")\n" -" set_quaternion(get_quaternion() * animation_tree." -"get_root_motion_rotation())\n" -" var treoluas: Vector3 = (beochan_tree." -"get_root_motion_rotation_accumulator(). inverse() * get_quaternion()) * " -"animation_tree.get_root_motion_position() / deilt\n" -" set_velocity(treoluas)\n" -" bog_agus_sleamhnán()\n" -"[/gdscript]\n" -"[/codeblocks]" - -msgid "" -"Retrieve the blended value of the position tracks with the [member " -"root_motion_track] as a [Vector3] that can be used elsewhere.\n" -"This is useful in cases where you want to respect the initial key values of " -"the animation.\n" -"For example, if an animation with only one key [code]Vector3(0, 0, 0)[/code] " -"is played in the previous frame and then an animation with only one key " -"[code]Vector3(1, 0, 1)[/code] is played in the next frame, the difference can " -"be calculated as follows:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_position_accumulator: Vector3\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_position_accumulator: Vector3 = animation_tree." -"get_root_motion_position_accumulator()\n" -" var difference: Vector3 = current_root_motion_position_accumulator - " -"prev_root_motion_position_accumulator\n" -" prev_root_motion_position_accumulator = " -"current_root_motion_position_accumulator\n" -" transform.origin += difference\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"However, if the animation loops, an unintended discrete change may occur, so " -"this is only useful for some simple use cases." -msgstr "" -"Aisghabh luach cumaiscthe na rianta suímh leis an [member root_motion_track] " -"mar [Vector3] is féidir a úsáid in aon áit eile.\n" -"Tá sé seo úsáideach i gcásanna inar mian leat príomhluachanna tosaigh na " -"beochana a urramú.\n" -"Mar shampla, má sheinntear beochan gan ach eochair amháin [code]Vector3(0, 0, " -"0)[/code] sa fhráma roimhe seo agus ansin beochan gan ach eochair amháin " -"[code]Vector3(1, 0, 1) Seinntear [/code] sa chéad fhráma eile, is féidir an " -"difríocht a ríomh mar seo a leanas:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_position_accumulator: Veicteoir3\n" -"\n" -"feidhm _process(deil):\n" -" má tá Input.is_action_just_pressed(\"beochan\"):\n" -" state_machine.travel (\"Beochan\")\n" -" var current_root_motion_position_accumulator: Vector3 = animation_tree." -"get_root_motion_position_accumulator()\n" -" difríocht var: Vector3 = current_root_motion_position_accumulator - " -"prev_root_motion_position_accumulator\n" -" prev_root_motion_position_accumulator = " -"current_root_motion_position_accumulator\n" -" transform.origin += difríocht\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"Mar sin féin, má lúbann an beochan, d'fhéadfadh athrú scoite neamhbheartaithe " -"tarlú, mar sin níl sé seo úsáideach ach i gcásanna áirithe úsáide simplí." - msgid "" "Retrieve the motion delta of rotation with the [member root_motion_track] as " "a [Quaternion] that can be used elsewhere.\n" @@ -9527,160 +7734,6 @@ msgstr "" "[/gdscript]\n" "[/codeblocks]" -msgid "" -"Retrieve the blended value of the rotation tracks with the [member " -"root_motion_track] as a [Quaternion] that can be used elsewhere.\n" -"This is necessary to apply the root motion position correctly, taking " -"rotation into account. See also [method get_root_motion_position].\n" -"Also, this is useful in cases where you want to respect the initial key " -"values of the animation.\n" -"For example, if an animation with only one key [code]Quaternion(0, 0, 0, 1)[/" -"code] is played in the previous frame and then an animation with only one key " -"[code]Quaternion(0, 0.707, 0, 0.707)[/code] is played in the next frame, the " -"difference can be calculated as follows:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_rotation_accumulator: Quaternion\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_rotation_accumulator: Quaternion = animation_tree." -"get_root_motion_rotation_accumulator()\n" -" var difference: Quaternion = prev_root_motion_rotation_accumulator." -"inverse() * current_root_motion_rotation_accumulator\n" -" prev_root_motion_rotation_accumulator = " -"current_root_motion_rotation_accumulator\n" -" transform.basis *= Basis(difference)\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"However, if the animation loops, an unintended discrete change may occur, so " -"this is only useful for some simple use cases." -msgstr "" -"Aisghabh luach cumaisc na rianta rothlaithe leis an [member " -"root_motion_track] mar [Ceathrún] is féidir a úsáid in aon áit eile.\n" -"Tá sé seo riachtanach chun an suíomh tairiscint fréimhe a chur i bhfeidhm i " -"gceart, ag cur uainíochta san áireamh. Féach freisin [method " -"get_root_motion_position].\n" -"Chomh maith leis sin, tá sé seo úsáideach i gcásanna inar mian leat " -"príomhluachanna tosaigh na beochana a urramú.\n" -"Mar shampla, má sheinntear beochan gan ach eochair amháin [code]Ceathrú(0, 0, " -"0, 1)[/code] sa fhráma roimhe seo agus ansin beochan gan ach eochair amháin " -"[code]Ceathrú(0, 0.707, Seinntear 0, 0.707)[/code] sa chéad fhráma eile, is " -"féidir an difríocht a ríomh mar seo a leanas:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_rotation_accumulator: Ceathrún\n" -"\n" -"feidhm _process(deil):\n" -" má tá Input.is_action_just_pressed(\"beochan\"):\n" -" state_machine.travel (\"Beochan\")\n" -" var current_root_motion_rotation_accumulator: Quaternion = animation_tree." -"get_root_motion_rotation_accumulator()\n" -" difríocht var: Quaternion = prev_root_motion_rotation_accumulator." -"inverse() * current_root_motion_rotation_accumulator\n" -" prev_root_motion_rotation_accumulator = " -"current_root_motion_rotation_accumulator\n" -" transform.basis *= Bunús(difríocht)\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"Mar sin féin, má lúbann an beochan, d'fhéadfadh athrú scoite neamhbheartaithe " -"tarlú, mar sin níl sé seo úsáideach ach i gcásanna áirithe úsáide simplí." - -msgid "" -"Retrieve the motion delta of scale with the [member root_motion_track] as a " -"[Vector3] that can be used elsewhere.\n" -"If [member root_motion_track] is not a path to a track of type [constant " -"Animation.TYPE_SCALE_3D], returns [code]Vector3(0, 0, 0)[/code].\n" -"See also [member root_motion_track] and [RootMotionView].\n" -"The most basic example is applying scale to [CharacterBody3D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var current_scale: Vector3 = Vector3(1, 1, 1)\n" -"var scale_accum: Vector3 = Vector3(1, 1, 1)\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" current_scale = get_scale()\n" -" scale_accum = Vector3(1, 1, 1)\n" -" state_machine.travel(\"Animate\")\n" -" scale_accum += animation_tree.get_root_motion_scale()\n" -" set_scale(current_scale * scale_accum)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Aisghabh deilte an scála gluaisne leis an [member root_motion_track] mar " -"[Vector3] is féidir a úsáid in aon áit eile.\n" -"Mura cosán é [member root_motion_track] chuig rian cineáil [Beochan leanúnach." -"TYPE_SCALE_3D], filleann [code]Vector3(0, 0, 0)[/code].\n" -"Féach freisin [member root_motion_track] agus [RootMotionView].\n" -"Is é an sampla is bunúsaí ná scála a chur i bhfeidhm ar [CharacterBody3D]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var current_scale: Vector3 = Veicteoir3(1, 1, 1)\n" -"var scale_accum: Vector3 = Veicteoir3(1, 1, 1)\n" -"\n" -"feidhm _process(deil):\n" -" má tá Input.is_action_just_pressed(\"beochan\"):\n" -" reatha_scála = faigh_scála()\n" -" scála_accum = Veicteoir 3(1, 1, 1)\n" -" state_machine.travel (\"Beochan\")\n" -" scale_accum += beochan_tree.get_root_motion_scale()\n" -" set_scale(scála_reatha * scála_accum)\n" -"[/gdscript]\n" -"[/codeblocks]" - -msgid "" -"Retrieve the blended value of the scale tracks with the [member " -"root_motion_track] as a [Vector3] that can be used elsewhere.\n" -"For example, if an animation with only one key [code]Vector3(1, 1, 1)[/code] " -"is played in the previous frame and then an animation with only one key " -"[code]Vector3(2, 2, 2)[/code] is played in the next frame, the difference can " -"be calculated as follows:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_scale_accumulator: Vector3\n" -"\n" -"func _process(delta):\n" -" if Input.is_action_just_pressed(\"animate\"):\n" -" state_machine.travel(\"Animate\")\n" -" var current_root_motion_scale_accumulator: Vector3 = animation_tree." -"get_root_motion_scale_accumulator()\n" -" var difference: Vector3 = current_root_motion_scale_accumulator - " -"prev_root_motion_scale_accumulator\n" -" prev_root_motion_scale_accumulator = " -"current_root_motion_scale_accumulator\n" -" transform.basis = transform.basis.scaled(difference)\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"However, if the animation loops, an unintended discrete change may occur, so " -"this is only useful for some simple use cases." -msgstr "" -"Aisghabh luach cumaiscthe na rianta scála leis an [member root_motion_track] " -"mar [Vector3] is féidir a úsáid in aon áit eile.\n" -"Mar shampla, má sheinntear beochan gan ach eochair amháin [code]Vector3(1, 1, " -"1)[/code] sa fhráma roimhe seo agus ansin beochan gan ach eochair amháin " -"[code]Vector3(2, 2, 2) Seinntear [/code] sa chéad fhráma eile, is féidir an " -"difríocht a ríomh mar seo a leanas:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var prev_root_motion_scale_accumulator: Vector3\n" -"\n" -"feidhm _próiseas(deil):\n" -" má tá Input.is_action_just_pressed(\"beochan\"):\n" -" state_machine.travel (\"Beochan\")\n" -" var current_root_motion_scale_accumulator: Vector3 = animation_tree." -"get_root_motion_scale_accumulator()\n" -" difríocht var: Vector3 = current_root_motion_scale_accumulator - " -"prev_root_motion_scale_accumulator\n" -" prev_root_motion_scale_accumulator = " -"current_root_motion_scale_accumulator\n" -" transform.basis = trasfhoirmiú.bunús.scála(difríocht)\n" -"[/gdscript]\n" -"[/codeblocks]\n" -"Mar sin féin, má lúbann an beochan, d'fhéadfadh athrú scoite neamhbheartaithe " -"tarlú, mar sin níl sé seo úsáideach ach i gcásanna áirithe úsáide simplí." - msgid "" "Returns [code]true[/code] if the [AnimationMixer] stores an [Animation] with " "key [param name]." @@ -9933,22 +7986,6 @@ msgstr "" "agus an rian [luachanna seasta Beochan.CREDATE_DIS]. Seo é an t-iompar " "réamhshocraithe do [AnimationPlayer]." -msgid "" -"Always treat the [constant Animation.UPDATE_DISCRETE] track value as " -"[constant Animation.UPDATE_CONTINUOUS] with [constant Animation." -"INTERPOLATION_NEAREST]. This is the default behavior for [AnimationTree].\n" -"If a value track has non-numeric type key values, it is internally converted " -"to use [constant ANIMATION_CALLBACK_MODE_DISCRETE_RECESSIVE] with [constant " -"Animation.UPDATE_DISCRETE]." -msgstr "" -"Déan luach rian [Beochan leanúnach.UPDATE_DISCRETE] a chóireáil i gcónaí mar " -"[Beochan leanúnach.UPDATE_CONTINUOUS] le [Beochan leanúnach." -"INTERPOLATION_NEAREST]. Is é seo an t-iompar réamhshocraithe le haghaidh " -"[AnimationTree].\n" -"Má tá eochairluachanna de chineál neamh-uimhriúil ag rian luacha, tiontaítear " -"é go hinmheánach chun [ANIMATION_CALLBACK_MODE_DISCRETE_RECESSIVE] a úsáid le " -"[Constant Animation.UPDATE_DISCRETE]." - msgid "Base class for [AnimationTree] nodes. Not related to scene nodes." msgstr "Bunrang do nóid [AnimationTree]. Ní bhaineann le nóid radharc." @@ -10159,9 +8196,6 @@ msgstr "" "a úsáidtear le haghaidh do nóid bheochana, toisc gur féidir acmhainn a " "athúsáid i gcrainn iolracha." -msgid "Returns whether the given path is filtered." -msgstr "Filleann sé cibé an bhfuil an cosán tugtha scagtha." - msgid "Removes an input, call this only when inactive." msgstr "Baintear ionchur, cuir glaoch air seo nuair atá sé neamhghníomhach." @@ -10542,6 +8576,28 @@ msgstr "" "Sraith de [AnimationRootNode]s curtha ar chomhordanáidí 2T, ag trasfhadú idir " "na trí cinn in aice láimhe. Arna úsáid ag [AnimationTree]." +msgid "" +"A resource used by [AnimationNodeBlendTree].\n" +"[AnimationNodeBlendSpace2D] represents a virtual 2D space on which " +"[AnimationRootNode]s are placed. Outputs the linear blend of the three " +"adjacent animations using a [Vector2] weight. Adjacent in this context means " +"the three [AnimationRootNode]s making up the triangle that contains the " +"current value.\n" +"You can add vertices to the blend space with [method add_blend_point] and " +"automatically triangulate it by setting [member auto_triangles] to " +"[code]true[/code]. Otherwise, use [method add_triangle] and [method " +"remove_triangle] to triangulate the blend space by hand." +msgstr "" +"Acmhainn a úsáideann [AnimationNodeBlendTree].\n" +"Léiríonn [AnimationNodeBlendSpace2D] spás fíorúil 2D ar a gcuirtear " +"[AnimationRootNode]s. Aschuir an cumasc líneach de na trí bheochan cóngaracha " +"le meáchan [Vector2]. In aice leis sa chomhthéacs seo ciallaíonn sé na trí " +"[AnimationRootNode]s comhdhéanta den triantán a bhfuil an luach reatha ann.\n" +"Is féidir leat rinn a chur leis an spás cumaisc le [method add_blend_point] " +"agus é a thriantánú go huathoibríoch trí [member auto_triangle] a shocrú go " +"[code]true[/code]. Seachas sin, úsáid [method add_triangle] agus [method " +"remove_triangle] chun an spás cumaisc a thriantánú de láimh." + msgid "" "Adds a new point that represents a [param node] at the position set by [param " "pos]. You can insert it at a specific index using the [param at_index] " @@ -10593,6 +8649,11 @@ msgid "Removes the triangle at index [param triangle] from the blend space." msgstr "" "Baineann sé an triantán ag comhéifeacht [triantán param] as spás an chumaisc." +msgid "" +"Updates the position of the point at index [param point] in the blend space." +msgstr "" +"Nuashonraítear suíomh an phointe ag an innéacs [param point] sa spás cumasc." + msgid "" "If [code]true[/code], the blend space is triangulated automatically. The mesh " "updates every time you add or remove points with [method add_blend_point] and " @@ -10882,13 +8943,6 @@ msgstr "" "Má tá [code]true[/code], briseann sé an lúb ag deireadh an timthrialla lúb " "don trasdul, fiú má tá an bheochan ag lúbadh." -msgid "" -"Determines how cross-fading between animations is eased. If empty, the " -"transition will be linear." -msgstr "" -"Cinneann an chaoi a n-éascaítear traschéimniú idir beochan. Má tá sé folamh, " -"beidh an t-aistriú líneach." - msgid "" "The fade-in duration. For example, setting this to [code]1.0[/code] for a 5 " "second length animation will produce a cross-fade that starts at 0 second and " @@ -10973,43 +9027,6 @@ msgstr "" "Meaisín stáit a bhfuil iolraí [AnimationRootNode]s air, arna úsáid ag " "[AnimationTree]." -msgid "" -"Contains multiple [AnimationRootNode]s representing animation states, " -"connected in a graph. State transitions can be configured to happen " -"automatically or via code, using a shortest-path algorithm. Retrieve the " -"[AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to " -"control it programmatically.\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\") as AnimationNodeStateMachinePlayback;\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Tá iolraí [AnimationRootNode]s ann a léiríonn stáit bheochana, ceangailte i " -"ngraf. Is féidir aistrithe stáit a chumrú le go dtarlóidh siad go " -"huathoibríoch nó trí chód, ag baint úsáide as algartam cosán is giorra. " -"Aisghabh an oibiacht [AnimationNodeStateMachinePlayback] ón nód " -"[AnimationTree] chun é a rialú go ríomhchláraithe.\n" -"[b]Sampla:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get (\"paraiméadair / athsheinm\")\n" -"state_machine.travel (\"cuid_stát\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode (\"AnimationTree\")." -"Get(\"paraiméadair/athsheinm\") mar AnimationNodeStateMachinePlayback;\n" -"stateMachine.Travel (\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Adds a new animation node to the graph. The [param position] is used for " "display in the editor." @@ -11151,39 +9168,6 @@ msgstr "" msgid "Provides playback control for an [AnimationNodeStateMachine]." msgstr "Soláthraíonn rialú athsheinm do [AnimationNodeStateMachine]." -msgid "" -"Allows control of [AnimationTree] state machines created with " -"[AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree." -"get(\"parameters/playback\")[/code].\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\").As();\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Ceadaíonn rialú meaisíní stáit [AnimationTree] cruthaithe le " -"[AnimationNodeStateMachine]. Aisghabh le [code]$AnimationTree." -"get(\"paraiméadair/athsheinm\")[/code].\n" -"[b]Sampla:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var state_machine = $AnimationTree.get(\"parameters/playback\")\n" -"state_machine.travel(\"some_state\")\n" -"[/gdscript]\n" -"[csharp]\n" -"var stateMachine = GetNode(\"AnimationTree\").Get(\"parameters/" -"playback\").As();\n" -"stateMachine.Travel(\"some_state\");\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns the current state length.\n" "[b]Note:[/b] It is possible that any [AnimationRootNode] can be nodes as well " @@ -11320,17 +9304,6 @@ msgstr "" "agus tugann sé solúbthacht i bhfad níos mó chun meaisíní casta stáit a " "chruthú trí idirphlé dhíreach a dhéanamh leis an gcód scripte." -msgid "" -"Determines whether the transition should disabled, enabled when using [method " -"AnimationNodeStateMachinePlayback.travel], or traversed automatically if the " -"[member advance_condition] and [member advance_expression] checks are true " -"(if assigned)." -msgstr "" -"Cinneann sé ar cheart an t-aistriú a dhíchumasú, a chumasú agus [method " -"AnimationNodeStateMachinePlayback.travel] á úsáid, nó trasnú go huathoibríoch " -"má tá na seiceálacha [member advance_condition] agus [member " -"advance_expression] fíor (má sanntar é)." - msgid "" "Lower priority transitions are preferred when travelling through the tree via " "[method AnimationNodeStateMachinePlayback.travel] or [member advance_mode] is " @@ -11350,12 +9323,6 @@ msgstr "" msgid "The transition type." msgstr "An cineál trasdula." -msgid "" -"Ease curve for better control over cross-fade between this state and the next." -msgstr "" -"Cuar éascaíochta le haghaidh smacht níos fearr ar thraschéimniú idir an stát " -"seo agus an chéad stát eile." - msgid "" "The time to cross-fade between this state and the next.\n" "[b]Note:[/b] [AnimationNodeStateMachine] transitions the current state " @@ -11407,13 +9374,6 @@ msgstr "" "Ná húsáid an trasdul seo ach amháin le linn [method " "AnimationNodeStateMachinePlayback.travel]." -msgid "" -"Automatically use this transition if the [member advance_condition] and " -"[member advance_expression] checks are true (if assigned)." -msgstr "" -"Úsáid an trasdul seo go huathoibríoch má tá na seiceálacha [member " -"advance_condition] agus [member advance_expression] fíor (má sanntar iad)." - msgid "" "Blends two animations subtractively inside of an [AnimationNodeBlendTree]." msgstr "" @@ -12402,43 +10362,6 @@ msgstr "" "Astaithe nuair a thagann an [réimse param] faighte amach ón limistéar seo. Ní " "mór [monatóireacht a dhéanamh ar chomhaltaí] a shocrú go [code]true[/code]." -msgid "" -"Emitted when a [Shape2D] of the received [param area] enters a shape of this " -"area. Requires [member monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param area_shape_index] contain indices of the " -"interacting shapes from this area and the other area, respectively. [param " -"area_rid] contains the [RID] of the other area. These values can be used with " -"the [PhysicsServer2D].\n" -"[b]Example of getting the[/b] [CollisionShape2D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Astaítear nuair a théann [Shape2D] den [limistéar param] isteach i gcruth an " -"achair seo. Ní mór [monatóireacht a dhéanamh ar chomhaltaí] a shocrú go " -"[code]true[/code].\n" -"Tá innéacsanna de na cruthanna idirghníomhaithe ón limistéar seo agus ón " -"limistéar eile, faoi seach, i [param local_shape_index] agus [param " -"area_shape_index]. Tá [RID] an cheantair eile i [param area_rid]. Is féidir " -"na luachanna seo a úsáid leis an [PhysicsServer2D].\n" -"[b]Sampla den [/b] [CollisionShape2D] [b]nód a fháil ón innéacs crutha:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape2D] of the received [param area] exits a shape of this " "area. Requires [member monitoring] to be set to [code]true[/code].\n" @@ -12471,47 +10394,6 @@ msgstr "" "Braitear [TileMap]anna má tá cruthanna imbhuailte ar a [TileSet] cumraithe. " "Ní mór [monatóireacht a dhéanamh ar chomhaltaí] a shocrú go [code]true[/code]." -msgid "" -"Emitted when a [Shape2D] of the received [param body] enters a shape of this " -"area. [param body] can be a [PhysicsBody2D] or a [TileMap]. [TileMap]s are " -"detected if their [TileSet] has collision shapes configured. Requires [member " -"monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param body_shape_index] contain indices of the " -"interacting shapes from this area and the interacting body, respectively. " -"[param body_rid] contains the [RID] of the body. These values can be used " -"with the [PhysicsServer2D].\n" -"[b]Example of getting the[/b] [CollisionShape2D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Astaítear nuair a théann [Shape2D] den [chorp param] isteach i gcruth an " -"achair seo. Is féidir le [corp param] a bheith ina [PhysicsBody2D] nó ina " -"[TileMap]. Braitear [TileMap]anna má tá cruthanna imbhuailte ar a [TileSet] " -"cumraithe. Ní mór [monatóireacht a dhéanamh ar chomhaltaí] a shocrú go " -"[code]true[/code].\n" -"Tá innéacsanna de na cruthanna idirghníomhaithe ón limistéar seo agus ón " -"gcorp idirghníomhaithe, faoi seach, i [param local_shape_index] agus [param " -"body_shape_index]. Tá [RID] an choirp i [param body_rid]. Is féidir na " -"luachanna seo a úsáid leis an [PhysicsServer2D].\n" -"[b]Sampla den [/b] [CollisionShape2D] [b]nód a fháil ón innéacs crutha:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape2D] of the received [param body] exits a shape of this " "area. [param body] can be a [PhysicsBody2D] or a [TileMap]. [TileMap]s are " @@ -12834,43 +10716,6 @@ msgstr "" "[b]Nóta:[/b] Ní bhaineann an fórsa gaoithe seo ach le nóid [SoftBody3D]. Níl " "aon tionchar ag an ngaoth ar chomhlachtaí fisice eile faoi láthair." -msgid "" -"Emitted when a [Shape3D] of the received [param area] enters a shape of this " -"area. Requires [member monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param area_shape_index] contain indices of the " -"interacting shapes from this area and the other area, respectively. [param " -"area_rid] contains the [RID] of the other area. These values can be used with " -"the [PhysicsServer3D].\n" -"[b]Example of getting the[/b] [CollisionShape3D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Astaítear nuair a théann [Shape3D] den [limistéar param] a fuarthas isteach i " -"gcruth an limistéir seo. Ní mór [monatóireacht a dhéanamh ar chomhaltaí] a " -"shocrú go [code]true[/code].\n" -"Tá innéacsanna de na cruthanna idirghníomhaithe ón limistéar seo agus ón " -"limistéar eile, faoi seach, i [param local_shape_index] agus [param " -"area_shape_index]. Tá [RID] an cheantair eile i [param area_rid]. Is féidir " -"na luachanna seo a úsáid leis an [PhysicsServer3D].\n" -"[b]Sampla den [/b] [CollisionShape3D] [b]nód a fháil ón innéacs crutha:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var other_shape_owner = area.shape_find_owner(area_shape_index)\n" -"var other_shape_node = area.shape_owner_get_owner(other_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape3D] of the received [param area] exits a shape of this " "area. Requires [member monitoring] to be set to [code]true[/code].\n" @@ -12905,47 +10750,6 @@ msgstr "" "cumraithe. Ní mór [monatóireacht a dhéanamh ar chomhaltaí] a shocrú go " "[code]true[/code]." -msgid "" -"Emitted when a [Shape3D] of the received [param body] enters a shape of this " -"area. [param body] can be a [PhysicsBody3D] or a [GridMap]. [GridMap]s are " -"detected if their [MeshLibrary] has collision shapes configured. Requires " -"[member monitoring] to be set to [code]true[/code].\n" -"[param local_shape_index] and [param body_shape_index] contain indices of the " -"interacting shapes from this area and the interacting body, respectively. " -"[param body_rid] contains the [RID] of the body. These values can be used " -"with the [PhysicsServer3D].\n" -"[b]Example of getting the[/b] [CollisionShape3D] [b]node from the shape index:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" -msgstr "" -"Astaítear nuair a théann [Shape3D] den [chomhlacht param] isteach i gcruth an " -"achair seo. Is féidir le [corp param] a bheith ina [PhysicsBody3D] nó ina " -"[GridMap]. Braitear [GridMap]anna má tá cruthanna imbhuailte ar a " -"[MeshLibrary] cumraithe. Ní mór [monatóireacht a dhéanamh ar chomhaltaí] a " -"shocrú go [code]true[/code].\n" -"Tá innéacsanna de na cruthanna idirghníomhaithe ón limistéar seo agus ón " -"gcorp idirghníomhaithe, faoi seach, i [param local_shape_index] agus [param " -"body_shape_index]. Tá [RID] an choirp i [param body_rid]. Is féidir na " -"luachanna seo a úsáid leis an [PhysicsServer3D].\n" -"[b]Sampla den [/b] [CollisionShape3D] [b]nód a fháil ón innéacs crutha:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var body_shape_owner = body.shape_find_owner(body_shape_index)\n" -"var body_shape_node = body.shape_owner_get_owner(body_shape_owner)\n" -"\n" -"var local_shape_owner = shape_find_owner(local_shape_index)\n" -"var local_shape_node = shape_owner_get_owner(local_shape_owner)\n" -"[/gdscript]\n" -"[/codeblocks]" - msgid "" "Emitted when a [Shape3D] of the received [param body] exits a shape of this " "area. [param body] can be a [PhysicsBody3D] or a [GridMap]. [GridMap]s are " @@ -12963,88 +10767,6 @@ msgstr "" msgid "A built-in data structure that holds a sequence of elements." msgstr "Struchtúr sonraí ionsuite a choinníonn seicheamh eilimintí." -msgid "" -"An array data structure that can contain a sequence of elements of any " -"[Variant] type. Elements are accessed by a numerical index starting at 0. " -"Negative indices are used to count from the back (-1 is the last element, -2 " -"is the second to last, etc.).\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var array = [\"First\", 2, 3, \"Last\"]\n" -"print(array[0]) # Prints \"First\"\n" -"print(array[2]) # Prints 3\n" -"print(array[-1]) # Prints \"Last\"\n" -"\n" -"array[1] = \"Second\"\n" -"print(array[1]) # Prints \"Second\"\n" -"print(array[-3]) # Prints \"Second\"\n" -"[/gdscript]\n" -"[csharp]\n" -"var array = new Godot.Collections.Array{\"First\", 2, 3, \"Last\"};\n" -"GD.Print(array[0]); // Prints \"First\"\n" -"GD.Print(array[2]); // Prints 3\n" -"GD.Print(array[array.Count - 1]); // Prints \"Last\"\n" -"\n" -"array[2] = \"Second\";\n" -"GD.Print(array[1]); // Prints \"Second\"\n" -"GD.Print(array[array.Count - 3]); // Prints \"Second\"\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Arrays are always passed by [b]reference[/b]. To get a copy of " -"an array that can be modified independently of the original array, use " -"[method duplicate].\n" -"[b]Note:[/b] Erasing elements while iterating over arrays is [b]not[/b] " -"supported and will result in unpredictable behavior.\n" -"[b]Differences between packed arrays, typed arrays, and untyped arrays:[/b] " -"Packed arrays are generally faster to iterate on and modify compared to a " -"typed array of the same type (e.g. [PackedInt64Array] versus [code]Array[int]" -"[/code]). Also, packed arrays consume less memory. As a downside, packed " -"arrays are less flexible as they don't offer as many convenience methods such " -"as [method Array.map]. Typed arrays are in turn faster to iterate on and " -"modify than untyped arrays." -msgstr "" -"Struchtúr sonraí eagar ar féidir seicheamh eilimintí d'aon chineál [Athróg] a " -"bheith ann. Faightear rochtain ar eilimintí trí innéacs uimhriúil ag tosú ag " -"0. Úsáidtear innéacsanna diúltacha chun comhaireamh ón gcúl (is é -1 an " -"eilimint dheireanach, is é -2 an dara ceann deireanach, etc.).\n" -"[b]Sampla:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"var array = [\"An Chéad\", 2, 3, \"Deireadh\"]\n" -"print(eagar[0]) # Priontála \"First\"\n" -"print(eagar[2]) # Priontála 3\n" -"print(eagar[-1]) # Priontála \"Aréir\"\n" -"\n" -"eagar[1] = \"dara\"\n" -"print(eagar[1]) # Priontála \"Second\"\n" -"print(eagar[-3]) # Priontála \"Second\"\n" -"[/gdscript]\n" -"[csharp]\n" -"var array = Godot.Collections.Array nua{ \"An Chéad\", 2, 3, \"Deireadh\"};\n" -"GD.Print(eagar[0]); // Priontaí \"First\"\n" -"GD.Print(eagar[2]); // Priontaí 3\n" -"GD.Print(eagar[eagar.Count - 1]); // Priontaí \"Deireadh\"\n" -"\n" -"array[2] = \"Dara\";\n" -"GD.Print(eagar[1]); // Priontálann \"Dara\"\n" -"GD.Print(eagar[eagar.Count - 3]); // Priontálann \"Dara\"\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Cuirtear eagar i gcónaí trí [b]tagairt[/b]. Chun cóip a fháil " -"d'eagar is féidir a mhodhnú go neamhspleách ar an eagar bunaidh, úsáid " -"[dúblach modh].\n" -"[b]Nóta:[/b] Ní thacaítear [b][/b] le heilimintí a scriosadh agus iad á " -"atriall thar eagair agus beidh iompar dothuartha mar thoradh air.\n" -"[b]Difríochtaí idir eagair phacáilte, eagair chlóscríofa, agus eagair " -"neamhchlóscríofa:[/b] Is gnách go mbíonn eagair phacáilte níos tapúla le " -"hathrú orthu agus le modhnú i gcomparáid le heagar clóscríofa den chineál " -"céanna (m.sh. [PackedInt64Array] versus [code]Eagar[int ][/code]). Chomh " -"maith leis sin, itheann eagair pacáilte níos lú cuimhne. Mar " -"dhrochbhuntáiste, níl eagair phacáilte chomh solúbtha mar ní thairgeann siad " -"an oiread modhanna áise mar [method Array.map]. Bíonn eagair chlóscríofa ar a " -"seal níos tapúla chun iad a atriall agus a mhodhnú ná eagair neamhchlóscríofa." - msgid "Constructs an empty [Array]." msgstr "Tógann [Eagar] folamh." @@ -13161,124 +10883,6 @@ msgstr "Tógann sé eagar ó [PackedVector3Array]." msgid "Constructs an array from a [PackedVector4Array]." msgstr "Tógann sé eagar ó [PackedVector4Array]." -msgid "" -"Calls the given [Callable] on each element in the array and returns " -"[code]true[/code] if the [Callable] returns [code]true[/code] for [i]all[/i] " -"elements in the array. If the [Callable] returns [code]false[/code] for one " -"array element or more, this method returns [code]false[/code].\n" -"The [param method] should take one [Variant] parameter (the current array " -"element) and return a [bool].\n" -"[codeblocks]\n" -"[gdscript]\n" -"func greater_than_5(number):\n" -" return number > 5\n" -"\n" -"func _ready():\n" -" print([6, 10, 6].all(greater_than_5)) # Prints true (3/3 elements " -"evaluate to true).\n" -" print([4, 10, 4].all(greater_than_5)) # Prints false (1/3 elements " -"evaluate to true).\n" -" print([4, 4, 4].all(greater_than_5)) # Prints false (0/3 elements " -"evaluate to true).\n" -" print([].all(greater_than_5)) # Prints true (0/0 elements " -"evaluate to true).\n" -"\n" -" # Same as the first line above, but using a lambda function.\n" -" print([6, 10, 6].all(func(element): return element > 5)) # Prints true\n" -"[/gdscript]\n" -"[csharp]\n" -"private static bool GreaterThan5(int number)\n" -"{\n" -" return number > 5;\n" -"}\n" -"\n" -"public override void _Ready()\n" -"{\n" -" // Prints true (3/3 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }." -"All(GreaterThan5));\n" -" // Prints false (1/3 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }." -"All(GreaterThan5));\n" -" // Prints false (0/3 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }." -"All(GreaterThan5));\n" -" // Prints true (0/0 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5));\n" -"\n" -" // Same as the first line above, but using a lambda function.\n" -" GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => " -"element > 5)); // Prints true\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"See also [method any], [method filter], [method map] and [method reduce].\n" -"[b]Note:[/b] Unlike relying on the size of an array returned by [method " -"filter], this method will return as early as possible to improve performance " -"(especially with large arrays).\n" -"[b]Note:[/b] For an empty array, this method [url=https://en.wikipedia.org/" -"wiki/Vacuous_truth]always[/url] returns [code]true[/code]." -msgstr "" -"Glaonna ar an [Inghlaoite] tugtha ar gach eilimint san eagar agus seol ar ais " -"[code]true[/code] má fhilleann an [Call inghlaoite] [code]true[/code] do " -"[i]gach[/i] eilimint san eagar. Má thugann an [Inghlao] [code]bréagach[/code] " -"ar ais d'eilimint eagar amháin nó níos mó, seolann an modh seo " -"[code]bréagach[/code] ar ais.\n" -"Ba cheart go dtógfadh an [param method] paraiméadar amháin [Athraitheach] (an " -"eilimint eagar reatha) agus go gcuirfí [bool] ar ais.\n" -"[codeblocks]\n" -"[gdscript]\n" -"func greater_than_5(number):\n" -" return number > 5\n" -"\n" -"func _ready():\n" -" print([6, 10, 6].all(greater_than_5)) # Priontaí fíor (meastar go bhfuil " -"3/3 eilimint fíor).\n" -" print([4, 10, 4].all(greater_than_5)) # Priontaí bréagach (meastar go " -"bhfuil 1/3 eilimint fíor).\n" -" print([4, 4, 4].all(greater_than_5)) # Priontaí bréagach (meastar go " -"bhfuil 0/3 eilimint fíor).\n" -" print([].all(greater_than_5)) # Priontaí fíor (meastaíonn 0/0 " -"eilimint go fíor).\n" -"\n" -" # Mar an gcéanna leis an gcéad líne thuas, ach ag baint úsáide as feidhm " -"lambda.\n" -" print([6, 10, 6].all(func(element): return element > 5)) # Priontála fíor\n" -"[/gdscript]\n" -"[csharp]\n" -"private static bool GreaterThan5(int number)\n" -"{\n" -" return number > 5;\n" -"}\n" -"\n" -"public override void _Ready()\n" -"{\n" -" // Prints true (3/3 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }." -"All(GreaterThan5));\n" -" // Prints false (1/3 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }." -"All(GreaterThan5));\n" -" // Prints false (0/3 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }." -"All(GreaterThan5));\n" -" // Prints true (0/0 elements evaluate to true).\n" -" GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5));\n" -"\n" -" // Same as the first line above, but using a lambda function.\n" -" GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => " -"element > 5)); // Prints true\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Féach freisin [method ar bith], [scagaire modha], [léarscáil modha] agus " -"[laghdaigh modh].\n" -"[b]Nóta:[/b] Murab ionann agus a bheith ag brath ar mhéid an eagar a " -"chuirtear ar ais ag [scagaire modha], fillfidh an modh seo chomh luath agus " -"is féidir chun feidhmíocht a fheabhsú (go háirithe le eagair mhóra).\n" -"[b]Nóta:[/b] Le haghaidh eagar folamh, filleann an modh seo [url=https://en." -"wikipedia.org/wiki/Vacuous_truth]i gcónaí[/url] [code]true[/code]." - msgid "" "Calls the given [Callable] on each element in the array and returns " "[code]true[/code] if the [Callable] returns [code]true[/code] for [i]one or " @@ -13349,6 +10953,23 @@ msgstr "" "Cuireann [paramluach] leis ag deireadh an eagar (ailias de [method " "push_back])." +msgid "" +"Appends another [param array] at the end of this array.\n" +"[codeblock]\n" +"var numbers = [1, 2, 3]\n" +"var extra = [4, 5, 6]\n" +"numbers.append_array(extra)\n" +"print(numbers) # Prints [1, 2, 3, 4, 5, 6]\n" +"[/codeblock]" +msgstr "" +"Cuireann [param array] eile leis ag deireadh an eagar seo.\n" +"[codeblock]\n" +"var uimhreacha = [1, 2, 3]\n" +"var breise = [4, 5, 6]\n" +"numbers.append_array(breise)\n" +"print(numbers) # Priontála [1, 2, 3, 4, 5, 6]\n" +"[/codeblock]" + msgid "" "Assigns elements of another [param array] into the array. Resizes the array " "to match [param array]. Performs type conversions if the array is typed." @@ -13501,9 +11122,6 @@ msgstr "" "Baineann sé na heilimintí go léir as an eagar. Tá sé seo comhionann le " "[method a athrú] le méid [code]0[/code] a úsáid." -msgid "Returns the number of times an element is in the array." -msgstr "Filleann sé an líon uaireanta atá dúil san eagar." - msgid "" "Returns a new copy of the array.\n" "By default, a [b]shallow[/b] copy is returned: all nested [Array] and " @@ -13538,49 +11156,6 @@ msgstr "" "[b]Nóta:[/b] Ní thacaítear [b][/b] le heilimintí a scriosadh agus iad á " "atriall thar eagair agus beidh iompar dothuartha mar thoradh air." -msgid "" -"Assigns the given [param value] to all elements in the array.\n" -"This method can often be combined with [method resize] to create an array " -"with a given size and initialized elements:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var array = []\n" -"array.resize(5)\n" -"array.fill(2)\n" -"print(array) # Prints [2, 2, 2, 2, 2]\n" -"[/gdscript]\n" -"[csharp]\n" -"var array = new Godot.Collections.Array();\n" -"array.Resize(5);\n" -"array.Fill(2);\n" -"GD.Print(array); // Prints [2, 2, 2, 2, 2]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] If [param value] is a [Variant] passed by reference ([Object]-" -"derived, [Array], [Dictionary], etc.), the array will be filled with " -"references to the same [param value], which are not duplicates." -msgstr "" -"Sanntar an [paraluach] a thugtar do gach eilimint san eagar.\n" -"Is minic is féidir an modh seo a chomhcheangal le [mmethod resize] chun eagar " -"a chruthú a bhfuil méid áirithe agus eilimintí tosaithe ann:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var array = []\n" -"array.resize(5)\n" -"array.fill(2)\n" -"print(array) # Prints [2, 2, 2, 2, 2]\n" -"[/gdscript]\n" -"[csharp]\n" -"var array = new Godot.Collections.Array();\n" -"array.Resize(5);\n" -"array.Fill(2);\n" -"GD.Print(array); // Prints [2, 2, 2, 2, 2]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Más [Athróg] é [paramluach] a rithtear trí thagairt ([Object]-" -"díorthaithe, [Eagar], [Foclóir], etc.), líonfar an t-eagar le tagairtí don " -"céanna [luach param], nach dúbailt iad." - msgid "" "Calls the given [Callable] on each element in the array and returns a new, " "filtered [Array].\n" @@ -13676,60 +11251,6 @@ msgstr "" "Filleann sé an ásc [Script] a bhaineann leis an eagar clóscríofa seo, nó " "[code]null[/code] mura bhfuil sé ann. Féach freisin [method is_typed]." -msgid "" -"Returns [code]true[/code] if the array contains the given [param value].\n" -"[codeblocks]\n" -"[gdscript]\n" -"print([\"inside\", 7].has(\"inside\")) # Prints true\n" -"print([\"inside\", 7].has(\"outside\")) # Prints false\n" -"print([\"inside\", 7].has(7)) # Prints true\n" -"print([\"inside\", 7].has(\"7\")) # Prints false\n" -"[/gdscript]\n" -"[csharp]\n" -"var arr = new Godot.Collections.Array { \"inside\", 7 };\n" -"// By C# convention, this method is renamed to `Contains`.\n" -"GD.Print(arr.Contains(\"inside\")); // Prints true\n" -"GD.Print(arr.Contains(\"outside\")); // Prints false\n" -"GD.Print(arr.Contains(7)); // Prints true\n" -"GD.Print(arr.Contains(\"7\")); // Prints false\n" -"[/csharp]\n" -"[/codeblocks]\n" -"In GDScript, this is equivalent to the [code]in[/code] operator:\n" -"[codeblock]\n" -"if 4 in [2, 4, 6, 8]:\n" -" print(\"4 is here!\") # Will be printed.\n" -"[/codeblock]\n" -"[b]Note:[/b] For performance reasons, the search is affected by the [param " -"value]'s [enum Variant.Type]. For example, [code]7[/code] ([int]) and " -"[code]7.0[/code] ([float]) are not considered equal for this method." -msgstr "" -"Filleann sé [code]true[/code] má tá an [paraluach] tugtha san eagar.\n" -"[codeblocks]\n" -"[gdscript]\n" -"print([\"taobh istigh\", 7].has(\"taobh istigh\")) # Priontaí fíor\n" -"print([\"taobh istigh\", 7].has(\"lasmuigh\")) # Priontála bréagach\n" -"print([\"taobh istigh\", 7].has(7)) # Priontaí fíor\n" -"print([\"taobh istigh\", 7].has(\"7\")) # Priontaí bréagach\n" -"[/gdscript]\n" -"[csharp]\n" -"var arr = nua Godot.Collections.Array { \"taobh istigh\", 7 };\n" -"// De réir an choinbhinsiúin C#, athainmnítear an modh seo go `Contains`.\n" -"GD.Print(arr.Contains(\"taobh istigh\")); // Priontaí fíor\n" -"GD.Print(arr.Contains(\"lasmuigh\")); // Priontaí bréagach\n" -"GD.Print(arr.Cuimsíonn(7)); // Priontaí fíor\n" -"GD.Print(arr.Contains(\"7\")); // Priontaí bréagach\n" -"[/csharp]\n" -"[/codeblocks]\n" -"I GDScript, tá sé seo comhionann leis an oibreoir [code]in[/code]:\n" -"[codeblock]\n" -"má tá 4 in [2, 4, 6, 8]:\n" -" print(\"Tá 4 anseo!\") # Priontálfar.\n" -"[/codeblock]\n" -"[b]Nóta:[/b] Ar chúiseanna feidhmíochta, bíonn tionchar ag an [param value] " -"ar [enum Variant.Type] ar an gcuardach. Mar shampla, ní mheastar go bhfuil " -"[code]7[/code] ([int]) agus [code]7.0[/code] ([snámhphointe]) comhionann don " -"mhodh seo." - msgid "" "Returns a hashed 32-bit integer value representing the array and its " "contents.\n" @@ -13877,41 +11398,6 @@ msgstr "" "a chur i gcomparáid. Seachas sin, seolann [code]null[/code] ar ais. Féach " "freisin [method max]." -msgid "" -"Returns a random element from the array. Generates an error and returns " -"[code]null[/code] if the array is empty.\n" -"[codeblocks]\n" -"[gdscript]\n" -"# May print 1, 2, 3.25, or \"Hi\".\n" -"print([1, 2, 3.25, \"Hi\"].pick_random())\n" -"[/gdscript]\n" -"[csharp]\n" -"var array = new Godot.Collections.Array { 1, 2, 3.25f, \"Hi\" };\n" -"GD.Print(array.PickRandom()); // May print 1, 2, 3.25, or \"Hi\".\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] Like many similar functions in the engine (such as [method " -"@GlobalScope.randi] or [method shuffle]), this method uses a common, global " -"random seed. To get a predictable outcome from this method, see [method " -"@GlobalScope.seed]." -msgstr "" -"Filleann eilimint randamach as an eagar. Cruthaíonn sé earráid agus seolann " -"ar ais [code]null[/code] má tá an t-eagar folamh.\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Bealtaine cló 1, 2, 3.25, nó \"Dia duit\".\n" -"cló([1, 2, 3.25, \"Dia duit\"].pick_random())\n" -"[/gdscript]\n" -"[csharp]\n" -"var eagar = nua Godot.Collections.Array { 1, 2, 3.25f, \"Dia duit\" };\n" -"GD.Print(eagar.PickRandom()); // Bealtaine cló 1, 2, 3.25, nó \"Dia duit\".\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Cosúil le go leor feidhmeanna comhchosúla san inneall (amhail " -"[method @GlobalScope.randi] nó [shuffle modh]), úsáideann an modh seo síol " -"randamach comhchoiteann domhanda. Chun toradh intuartha a fháil ón modh seo, " -"féach [method @GlobalScope.seed]." - msgid "" "Removes and returns the element of the array at index [param position]. If " "negative, [param position] is considered relative to the end of the array. " @@ -13968,71 +11454,6 @@ msgstr "" "aghaidh, rud a d’fhéadfadh costas feidhmíochta suntasach a bheith i gceist " "leis, go háirithe ar eagair níos mó." -msgid "" -"Calls the given [Callable] for each element in array, accumulates the result " -"in [param accum], then returns it.\n" -"The [param method] takes two arguments: the current value of [param accum] " -"and the current array element. If [param accum] is [code]null[/code] (as by " -"default), the iteration will start from the second element, with the first " -"one used as initial value of [param accum].\n" -"[codeblock]\n" -"func sum(accum, number):\n" -" return accum + number\n" -"\n" -"func _ready():\n" -" print([1, 2, 3].reduce(sum, 0)) # Prints 6\n" -" print([1, 2, 3].reduce(sum, 10)) # Prints 16\n" -"\n" -" # Same as above, but using a lambda function.\n" -" print([1, 2, 3].reduce(func(accum, number): return accum + number, 10))\n" -"[/codeblock]\n" -"If [method max] is not desirable, this method may also be used to implement a " -"custom comparator:\n" -"[codeblock]\n" -"func _ready():\n" -" var arr = [Vector2(5, 0), Vector2(3, 4), Vector2(1, 2)]\n" -"\n" -" var longest_vec = arr.reduce(func(max, vec): return vec if " -"is_length_greater(vec, max) else max)\n" -" print(longest_vec) # Prints Vector2(3, 4).\n" -"\n" -"func is_length_greater(a, b):\n" -" return a.length() > b.length()\n" -"[/codeblock]\n" -"See also [method map], [method filter], [method any] and [method all]." -msgstr "" -"Glaonn an [Callable] tugtha do gach eilimint in eagar, carnann sé an toradh i " -"[param accum], ansin filleann sé é.\n" -"Glacann an [param accum] dhá argóint: luach reatha [param accum] agus an " -"eilimint eagar reatha. Más [code]null[/code] é [param accum] (mar de réir " -"réamhshocraithe), cuirfear tús leis an atriall ón dara heilimint, agus " -"úsáidfear an chéad cheann mar luach tosaigh [param accum].\n" -"[codeblock]\n" -"func sum(accum, number):\n" -" return accum + number\n" -"\n" -"func _ready():\n" -" print([1, 2, 3].reduce(sum, 0)) # Prints 6\n" -" print([1, 2, 3].reduce(sum, 10)) # Prints 16\n" -"\n" -" # Same as above, but using a lambda function.\n" -" print([1, 2, 3].reduce(func(accum, number): return accum + number, 10))\n" -"[/codeblock]\n" -"If [method max] is not desirable, this method may also be used to implement a " -"custom comparator:\n" -"[codeblock]\n" -"func _ready():\n" -" var arr = [Vector2(5, 0), Vector2(3, 4), Vector2(1, 2)]\n" -"\n" -" var longest_vec = arr.reduce(func(max, vec): return vec if " -"is_length_greater(vec, max) else max)\n" -" print(longest_vec) # Prints Vector2(3, 4).\n" -"\n" -"func is_length_greater(a, b):\n" -" return a.length() > b.length()\n" -"[/codeblock]\n" -"Féach freisin method map], [method filter], [method any] agus [method all]." - msgid "" "Removes the element from the array at the given index ([param position]). If " "the index is out of bounds, this method fails.\n" @@ -14157,43 +11578,83 @@ msgstr "" "[/codeblock]" msgid "" -"Sorts the array in ascending order. The final order is dependent on the " -"\"less than\" ([code]<[/code]) comparison between elements.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var numbers = [10, 5, 2.5, 8]\n" -"numbers.sort()\n" -"print(numbers) # Prints [2.5, 5, 8, 10]\n" -"[/gdscript]\n" -"[csharp]\n" -"var numbers = new Godot.Collections.Array { 10, 5, 2.5, 8 };\n" -"numbers.Sort();\n" -"GD.Print(numbers); // Prints [2.5, 5, 8, 10]\n" -"[/csharp]\n" -"[/codeblocks]\n" +"Sorts the array using a custom [Callable].\n" +"[param func] is called as many times as necessary, receiving two array " +"elements as arguments. The function should return [code]true[/code] if the " +"first element should be moved [i]before[/i] the second one, otherwise it " +"should return [code]false[/code].\n" +"[codeblock]\n" +"func sort_ascending(a, b):\n" +" if a[1] < b[1]:\n" +" return true\n" +" return false\n" +"\n" +"func _ready():\n" +" var my_items = [[\"Tomato\", 5], [\"Apple\", 9], [\"Rice\", 4]]\n" +" my_items.sort_custom(sort_ascending)\n" +" print(my_items) # Prints [[\"Rice\", 4], [\"Tomato\", 5], [\"Apple\", " +"9]]\n" +"\n" +" # Sort descending, using a lambda function.\n" +" my_items.sort_custom(func(a, b): return a[1] > b[1])\n" +" print(my_items) # Prints [[\"Apple\", 9], [\"Tomato\", 5], [\"Rice\", " +"4]]\n" +"[/codeblock]\n" +"It may also be necessary to use this method to sort strings by natural order, " +"with [method String.naturalnocasecmp_to], as in the following example:\n" +"[codeblock]\n" +"var files = [\"newfile1\", \"newfile2\", \"newfile10\", \"newfile11\"]\n" +"files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0)\n" +"print(files) # Prints [\"newfile1\", \"newfile2\", \"newfile10\", " +"\"newfile11\"]\n" +"[/codeblock]\n" +"[b]Note:[/b] In C#, this method is not supported.\n" "[b]Note:[/b] The sorting algorithm used is not [url=https://en.wikipedia.org/" -"wiki/Sorting_algorithm#Stability]stable[/url]. This means that equivalent " -"elements (such as [code]2[/code] and [code]2.0[/code]) may have their order " -"changed when calling [method sort]." -msgstr "" -"Sórtáil an t-eagar in ord ardaitheach. Tá an t-ordú deiridh ag brath ar an " -"gcomparáid \"níos lú ná\" ([code] <[/code]) idir eilimintí.\n" -"codeblocks]\n" -"[gdscript]\n" -"var numbers = [10, 5, 2.5, 8]\n" -"numbers.sort()\n" -"print(numbers) # Prints [2.5, 5, 8, 10]\n" -"[/gdscript]\n" -"[csharp]\n" -"var numbers = new Godot.Collections.Array { 10, 5, 2.5, 8 };\n" -"numbers.Sort();\n" -"GD.Print(numbers); // Prints [2.5, 5, 8, 10]\n" -"[/csharp]\n" -"[/codeblocks]\n" +"wiki/Sorting_algorithm#Stability]stable[/url]. This means that values " +"considered equal may have their order changed when calling this method.\n" +"[b]Note:[/b] You should not randomize the return value of [param func], as " +"the heapsort algorithm expects a consistent result. Randomizing the return " +"value will result in unexpected behavior." +msgstr "" +"Sórtálann sé an t-eagar trí úsáid a bhaint as saincheaptha [Callable].\n" +"Tugtar [param func] ar a mhéad uair is gá, ag fáil dhá eilimint eagar mar " +"argóintí. Ba cheart go dtabharfadh an fheidhm [code]true[/code] ar ais más " +"rud é gur cheart an chéad eilimint a bhogadh [i] taobh thiar[/i] den dara " +"ceann, nó ba cheart di [code]false[/code] a thabhairt ar ais.\n" +"[codeblock]\n" +"func sort_ascending(a, b):\n" +" if a[1] < b[1]:\n" +" return true\n" +" return false\n" +"\n" +"func _ready():\n" +" var my_items = [[\"Trátaí\", 5], [\"Apple\", 9], [\"Rís\", 4]]\n" +" my_items.sort_custom(sort_ascending)\n" +" print(my_items) # Priontaí [[\"Rís\", 4], [\"Trátaí\", 5], [\"Apple\", " +"9]]\n" +"\n" +" # Sórtáil íslitheach, ag baint úsáide as feidhm lambda.\n" +" my_items.sort_custom(func(a,b): return a[0] > b[0])\n" +" print(my_items) # Priontaí [[\"Apple\", 9], [\"Trátaí\", 5], [\"Rís\", " +"4]]\n" +"[/codeblock]\n" +"D’fhéadfadh go mbeadh sé riachtanach an modh seo a úsáid freisin chun " +"teaghráin a shórtáil de réir ord nádúrtha, le [method String." +"naturalnocasecmp_to], mar atá sa sampla seo a leanas:\n" +"[codeblock]\n" +"var comhaid = [\"newfile1\", \"newfile2\", \"newfile10\", \"newfile11\"]\n" +"files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0)\n" +"print(comhaid) # Priontála [\"newfile1\", \"newfile2\", \"newfile10\", " +"\"newfile11\"]\n" +"[/codeblock]\n" +"[b]Nóta:[/b] In C#, ní thacaítear leis an modh seo.\n" "[b]Nóta:[/b] Níl an algartam sórtála a úsáidtear [url=https://en.wikipedia." "org/wiki/Sorting_algorithm#Stability]stable[/url]. Ciallaíonn sé seo gur " -"féidir go n-athrófaí ord na n-eilimintí coibhéiseacha (cosúil le [code]2[/" -"code] agus [code]2.0[/code]) agus iad ag glaoch ar [method saghas]." +"féidir go n-athrófaí ord na luachanna a mheastar a bheith comhionann agus an " +"modh seo á ghlaoch.\n" +"[b]Nóta:[/b] Níor cheart duit luach aischuir [param func] a randamach, toisc " +"go bhfuil an t-algartam heapsort ag súil le toradh comhsheasmhach. Beidh " +"iompar gan choinne mar thoradh ar an luach tuairisceáin a randamach." msgid "" "Returns [code]true[/code] if the array's size or its elements are different " @@ -14202,45 +11663,6 @@ msgstr "" "Filleann sé [code]true[/code] má tá méid an eagair nó a heilimintí difriúil ó " "mhéid [param ar dheis]." -msgid "" -"Appends the [param right] array to the left operand, creating a new [Array]. " -"This is also known as an array concatenation.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var array1 = [\"One\", 2]\n" -"var array2 = [3, \"Four\"]\n" -"print(array1 + array2) # Prints [\"One\", 2, 3, \"Four\"]\n" -"[/gdscript]\n" -"[csharp]\n" -"// Note that concatenation is not possible with C#'s native Array type.\n" -"var array1 = new Godot.Collections.Array{\"One\", 2};\n" -"var array2 = new Godot.Collections.Array{3, \"Four\"};\n" -"GD.Print(array1 + array2); // Prints [\"One\", 2, 3, \"Four\"]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] For existing arrays, [method append_array] is much more " -"efficient than concatenation and assignment with the [code]+=[/code] operator." -msgstr "" -"Ceangailte leis an eagar [param ar dheis] leis an operand chlé, ag cruthú " -"[Eagar] nua. Tugtar comhchatún eagair air seo freisin.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var array1 = [\"Aon\", 2]\n" -"var array2 = [3, \"Ceithre\"]\n" -"print(eagar1 + eagar2) # Priontála [\"Aon\", 2, 3, \"Ceithre\"]\n" -"[/gdscript]\n" -"[csharp]\n" -"// Tabhair faoi deara nach féidir comhghaolú leis an gcineál dúchasach Array " -"C#.\n" -"var array1 = Godot.Collections.Array nua{ \"One\", 2};\n" -"var array2 = Godot.Collections.Array nua{3, \"Four\"};\n" -"GD.Print(eagar1 + eagar2); // Priontaí [\"Aon\", 2, 3, \"Ceithre\"]\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] I gcás eagair atá ann cheana féin, tá [method append_array] i " -"bhfad níos éifeachtaí ná comhtháthú agus sannadh leis an oibreoir [code]+=[/" -"code]." - msgid "" "Compares the elements of both arrays in order, starting from index [code]0[/" "code] and ending on the last index in common between both arrays. For each " @@ -14345,103 +11767,6 @@ msgid "" msgstr "" "Cineál [mogalra] a sholáthraíonn fóntais chun dromchla a thógáil ó eagair." -msgid "" -"The [ArrayMesh] is used to construct a [Mesh] by specifying the attributes as " -"arrays.\n" -"The most basic example is the creation of a single triangle:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var vertices = PackedVector3Array()\n" -"vertices.push_back(Vector3(0, 1, 0))\n" -"vertices.push_back(Vector3(1, 0, 0))\n" -"vertices.push_back(Vector3(0, 0, 1))\n" -"\n" -"# Initialize the ArrayMesh.\n" -"var arr_mesh = ArrayMesh.new()\n" -"var arrays = []\n" -"arrays.resize(Mesh.ARRAY_MAX)\n" -"arrays[Mesh.ARRAY_VERTEX] = vertices\n" -"\n" -"# Create the Mesh.\n" -"arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)\n" -"var m = MeshInstance3D.new()\n" -"m.mesh = arr_mesh\n" -"[/gdscript]\n" -"[csharp]\n" -"var vertices = new Vector3[]\n" -"{\n" -" new Vector3(0, 1, 0),\n" -" new Vector3(1, 0, 0),\n" -" new Vector3(0, 0, 1),\n" -"};\n" -"\n" -"// Initialize the ArrayMesh.\n" -"var arrMesh = new ArrayMesh();\n" -"var arrays = new Godot.Collections.Array();\n" -"arrays.Resize((int)Mesh.ArrayType.Max);\n" -"arrays[(int)Mesh.ArrayType.Vertex] = vertices;\n" -"\n" -"// Create the Mesh.\n" -"arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);\n" -"var m = new MeshInstance3D();\n" -"m.Mesh = arrMesh;\n" -"[/csharp]\n" -"[/codeblocks]\n" -"The [MeshInstance3D] is ready to be added to the [SceneTree] to be shown.\n" -"See also [ImmediateMesh], [MeshDataTool] and [SurfaceTool] for procedural " -"geometry generation.\n" -"[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-" -"OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive " -"modes." -msgstr "" -"Úsáidtear an [ArrayMesh] chun [mogalra] a thógáil trí na tréithe a shonrú mar " -"eagair.\n" -"Is é an sampla is bunúsaí ná cruthú triantáin aonair:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var vertices = PackedVector3Array()\n" -"rinn.push_back(Veicteoir 3(0, 1, 0))\n" -"rinn.push_back(Veicteoir 3(1, 0, 0))\n" -"rinn.push_back(Veicteoir 3(0, 0, 1))\n" -"\n" -"# Tosaigh an ArrayMesh.\n" -"var arr_mesh = ArrayMesh.new()\n" -"var arrays = []\n" -"arrays.resize(mogalra.ARRAY_MAX)\n" -"eagair[Mesh.ARRAY_VERTEX] = rinn\n" -"\n" -"# Cruthaigh an Mogall.\n" -"arr_mesh.add_surface_from_arrays(mogall.PRIMITIVE_TRIANGLES, eagair)\n" -"var m = MeshInstance3D.new()\n" -"m.mesh = arr_mesh\n" -"[/gdscript]\n" -"[csharp]\n" -"var rinn = veicteoir nua3[]\n" -"{\n" -" Veicteoir nua 3(0, 1, 0),\n" -" Veicteoir nua 3(1, 0, 0),\n" -" Veicteoir nua 3(0, 0, 1),\n" -"};\n" -"\n" -"// Tús a chur leis an ArrayMesh.\n" -"var arrMesh = ArrayMesh nua();\n" -"var arrays = Godot.Collections.Array nua();\n" -"arrays.Resize((int)mogalra.ArrayType.Max);\n" -"arrays[(int)Mesh.ArrayType.Vertex] = rinn;\n" -"\n" -"// Cruthaigh an Mogall.\n" -"arrMesh.AddSurfaceFromArrays(Mogall.Type.Primitive.Triantáin, eagair);\n" -"var m = MeshInstance3D nua();\n" -"m.Mesh = arrMesh;\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Tá an [MeshInstance3D] réidh le cur leis an [SceneTree] le taispeáint.\n" -"Féach freisin [ImmediateMesh], [MeshDataTool] agus [SurfaceTool] maidir le " -"giniúint céimseata nós imeachta.\n" -"[b]Nóta:[/b] Úsáideann Godot deiseal [url=https://learnopengl.com/Advanced-" -"OpenGL/Face-culling]ord foirceannadh[/url] le haghaidh aghaidheanna tosaigh " -"na modhanna triantáin primitive." - msgid "Procedural geometry using the ArrayMesh" msgstr "Céimseata nós imeachta ag baint úsáide as an ArrayMesh" @@ -14452,83 +11777,6 @@ msgstr "" "Cuirtear ainm leis ar chruth cumaisc a chuirfear leis le [method " "add_surface_from_arrays]. Ní mór é a ghlaoch sula gcuirtear dromchla leis." -msgid "" -"Creates a new surface. [method Mesh.get_surface_count] will become the " -"[code]surf_idx[/code] for this new surface.\n" -"Surfaces are created to be rendered using a [param primitive], which may be " -"any of the values defined in [enum Mesh.PrimitiveType].\n" -"The [param arrays] argument is an array of arrays. Each of the [constant Mesh." -"ARRAY_MAX] elements contains an array with some of the mesh data for this " -"surface as described by the corresponding member of [enum Mesh.ArrayType] or " -"[code]null[/code] if it is not used by the surface. For example, " -"[code]arrays[0][/code] is the array of vertices. That first vertex sub-array " -"is always required; the others are optional. Adding an index array puts this " -"surface into \"index mode\" where the vertex and other arrays become the " -"sources of data and the index array defines the vertex order. All sub-arrays " -"must have the same length as the vertex array (or be an exact multiple of the " -"vertex array's length, when multiple elements of a sub-array correspond to a " -"single vertex) or be empty, except for [constant Mesh.ARRAY_INDEX] if it is " -"used.\n" -"The [param blend_shapes] argument is an array of vertex data for each blend " -"shape. Each element is an array of the same structure as [param arrays], but " -"[constant Mesh.ARRAY_VERTEX], [constant Mesh.ARRAY_NORMAL], and [constant " -"Mesh.ARRAY_TANGENT] are set if and only if they are set in [param arrays] and " -"all other entries are [code]null[/code].\n" -"The [param lods] argument is a dictionary with [float] keys and " -"[PackedInt32Array] values. Each entry in the dictionary represents an LOD " -"level of the surface, where the value is the [constant Mesh.ARRAY_INDEX] " -"array to use for the LOD level and the key is roughly proportional to the " -"distance at which the LOD stats being used. I.e., increasing the key of an " -"LOD also increases the distance that the objects has to be from the camera " -"before the LOD is used.\n" -"The [param flags] argument is the bitwise or of, as required: One value of " -"[enum Mesh.ArrayCustomFormat] left shifted by " -"[code]ARRAY_FORMAT_CUSTOMn_SHIFT[/code] for each custom channel in use, " -"[constant Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE], [constant Mesh." -"ARRAY_FLAG_USE_8_BONE_WEIGHTS], or [constant Mesh." -"ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY].\n" -"[b]Note:[/b] When using indices, it is recommended to only use points, lines, " -"or triangles." -msgstr "" -"Cruthaíonn dromchla nua. Déanfaidh [method Mesh.get_surface_count] an " -"[code]surf_idx[/code] don dromchla nua seo.\n" -"Cruthaítear dromchlaí chun a rindreáil ag baint úsáide as [param primitive], " -"a fhéadfaidh a bheith mar aon cheann de na luachanna atá sainmhínithe i [enum " -"Mesh.PrimitiveType].\n" -"Is sraith eagair í an argóint [param arrays]. Tá eagar i ngach ceann de na " -"[mesh.ARRAY_MAX] le roinnt de na sonraí mogaill don dromchla seo arna chur " -"síos ag an gcomhalta comhfhreagrach de [enum Mesh.ArrayType] nó [code]null[/" -"code] mura n-úsáideann ag an dromchla. Mar shampla, is é [code]eagair[0][/" -"code] an t-eagar rinn. Teastaíonn an chéad fho-eagar rinn sin i gcónaí; tá na " -"cinn eile roghnach. Nuair a chuirtear eagar innéacs leis cuirtear an dromchla " -"seo isteach sa \"mód innéacs\" áit a n-éiríonn an rinn agus eagair eile ina " -"bhfoinsí sonraí agus sainmhíníonn an t-eagar innéacs an t-ord rinn. Caithfidh " -"an fad céanna a bheith ag gach fo-eagar agus an t-eagar rinn (nó a bheith ina " -"iolraí beacht d'fhad an eagar rinn, nuair a chomhfhreagraíonn eilimintí " -"iolracha d'fho-eagar d'aon rinn) nó a bheith folamh, ach amháin i gcás " -"[mogall seasta.ARRAY_INDEX ] má úsáidtear é.\n" -"Is é atá san argóint [param blend_shapes] ná sraith sonraí rinn do gach cruth " -"cumaisc. Tá gach eilimint ina sraith den struchtúr céanna le [eagair param], " -"ach socraítear [mogalra leanúnach.ARRAY_VERTEX], [mesh.ARRAY_NORMAL " -"leanúnach], agus [mesh.ARRAY_TANGENT leanúnach] más rud é agus amháin má tá " -"siad socraithe i [eagair param. ] agus is é [code]null[/code] gach iontráil " -"eile.\n" -"Is foclóir é an argóint [param lods] le heochracha [snámhphointe] agus " -"luachanna [PackedInt32Array]. Léiríonn gach iontráil sa bhfoclóir leibhéal " -"LOD an dromchla, áit a bhfuil an luach an t-eagar [Mogall leanúnach." -"ARRAY_INDEX] le húsáid don leibhéal LOD agus tá an eochair i gcomhréir go " -"garbh leis an achar ag a bhfuil na stats LOD á n-úsáid. I.e., má mhéadaítear " -"eochair LOD méadaítear an fad a chaithfidh na réada a bheith ón gceamara sula " -"n-úsáidfear an LOD.\n" -"Is é an argóint [bratacha param] an beagán nó de, mar is gá: Luach amháin de " -"[enum Mesh.ArrayCustomFormat] fágtha aistrithe ag " -"[code]ARRAY_FORMAT_CUSTOMn_SHIFT[/code] do gach cainéal saincheaptha in " -"úsáid, [Mogall leanúnach.ARRAY_FLAG_USE_DYNAMIC_UPDATE], [ mogalra tairiseach." -"ARRAY_FLAG_USE_8_BONE_WEIGHTS], nó [mogall seasmhach." -"ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY].\n" -"[b]Nóta:[/b] Agus innéacsanna á n-úsáid, moltar gan ach pointí, línte nó " -"triantáin a úsáid." - msgid "Removes all blend shapes from this [ArrayMesh]." msgstr "Baineann sé seo gach cruth cumaisc ón [ArrayMesh]." @@ -14972,32 +12220,71 @@ msgstr "" "Filleann sé toilleadh an struchtúir a thacaíonn leis na pointí, úsáideach i " "gcomhar le [method reserve_space]." +msgid "" +"Returns an array with the IDs of the points that form the connection with the " +"given point.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var astar = AStar2D.new()\n" +"astar.add_point(1, Vector2(0, 0))\n" +"astar.add_point(2, Vector2(0, 1))\n" +"astar.add_point(3, Vector2(1, 1))\n" +"astar.add_point(4, Vector2(2, 0))\n" +"\n" +"astar.connect_points(1, 2, true)\n" +"astar.connect_points(1, 3, true)\n" +"\n" +"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n" +"[/gdscript]\n" +"[csharp]\n" +"var astar = new AStar2D();\n" +"astar.AddPoint(1, new Vector2(0, 0));\n" +"astar.AddPoint(2, new Vector2(0, 1));\n" +"astar.AddPoint(3, new Vector2(1, 1));\n" +"astar.AddPoint(4, new Vector2(2, 0));\n" +"\n" +"astar.ConnectPoints(1, 2, true);\n" +"astar.ConnectPoints(1, 3, true);\n" +"\n" +"long[] neighbors = astar.GetPointConnections(1); // Returns [2, 3]\n" +"[/csharp]\n" +"[/codeblocks]" +msgstr "" +"Filleann sé eagar ar a bhfuil IDanna na bpointí a dhéanann an nasc leis an " +"bpointe tugtha.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var astar = AStar2D.new()\n" +"astar.add_point(1, Vector2(0, 0))\n" +"astar.add_point(2, Vector2(0, 1))\n" +"astar.add_point(3, Vector2(1, 1))\n" +"astar.add_point(4, Vector2(2, 0))\n" +"\n" +"astar.connect_points(1, 2, true)\n" +"astar.connect_points(1, 3, true)\n" +"\n" +"var neighbors = astar.get_point_connections(1) # Fill ar ais [2, 3]\n" +"[/gdscript]\n" +"[csharp]\n" +"var astar = new AStar2D();\n" +"astar.AddPoint(1, new Vector2(0, 0));\n" +"astar.AddPoint(2, new Vector2(0, 1));\n" +"astar.AddPoint(3, new Vector2(1, 1));\n" +"astar.AddPoint(4, new Vector2(2, 0));\n" +"\n" +"astar.ConnectPoints(1, 2, true);\n" +"astar.ConnectPoints(1, 3, true);\n" +"\n" +"long[] neighbors = astar.GetPointConnections(1); // Filleann [2, 3]\n" +"[/csharp]\n" +"[/codeblocks]" + msgid "Returns the number of points currently in the points pool." msgstr "Filleann sé líon na bpointí atá sa chomhthiomsú pointí faoi láthair." msgid "Returns an array of all point IDs." msgstr "Filleann sé sraith de gach pointe aitheantais." -msgid "" -"Returns an array with the points that are in the path found by AStar2D " -"between the given points. The array is ordered from the starting point to the " -"ending point of the path.\n" -"If there is no valid path to the target, and [param allow_partial_path] is " -"[code]true[/code], returns a path to the point closest to the target that can " -"be reached.\n" -"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it " -"will return an empty array and will print an error message." -msgstr "" -"Filleann sé eagar a bhfuil na pointí atá sa chonair aimsithe ag AStar2D idir " -"na pointí tugtha. Ordaítear an t-eagar ón bpointe tosaigh go dtí " -"críochphointe an chosáin.\n" -"Mura bhfuil cosán bailí go dtí an sprioc, agus [param allow_partial_path] is " -"[code]true[/code], filleann sé cosán go dtí an pointe is gaire don sprioc is " -"féidir a bhaint amach.\n" -"[b]Nóta:[/b] Níl an modh seo sábháilte ó thaobh snáitheanna de. Má ghlaoitear " -"air ó [Snáithe], seolfaidh sé eagar folamh ar ais agus priontálfaidh sé " -"teachtaireacht earráide." - msgid "Returns the position of the point associated with the given [param id]." msgstr "Filleann sé suíomh an phointe a bhaineann leis an [param id] a thugtar." @@ -15024,16 +12311,6 @@ msgstr "" "Baintear an pointe a bhaineann leis an [param id] a thugtar as an " "gcomhthiomsú pointí." -msgid "" -"Reserves space internally for [param num_nodes] points, useful if you're " -"adding a known large number of points at once, such as points on a grid. New " -"capacity must be greater or equals to old capacity." -msgstr "" -"Cuirtear spás in áirithe go hinmheánach le haghaidh [param num_nodes] pointí, " -"úsáideach má tá tú ag cur líon mór pointí aithnidiúla leis ag an am céanna, " -"amhail pointí ar eangach. Caithfidh toilleadh nua a bheith níos mó nó cothrom " -"leis an tseanacmhainn." - msgid "" "Disables or enables the specified point for pathfinding. Useful for making a " "temporary obstacle." @@ -15063,120 +12340,6 @@ msgstr "" "Cur i bhfeidhm A* chun an cosán is giorra idir dhá rinn a aimsiú ar ghraf " "nasctha i spás 3D." -msgid "" -"A* (A star) is a computer algorithm used in pathfinding and graph traversal, " -"the process of plotting short paths among vertices (points), passing through " -"a given set of edges (segments). It enjoys widespread use due to its " -"performance and accuracy. Godot's A* implementation uses points in 3D space " -"and Euclidean distances by default.\n" -"You must add points manually with [method add_point] and create segments " -"manually with [method connect_points]. Once done, you can test if there is a " -"path between two points with the [method are_points_connected] function, get " -"a path containing indices by [method get_id_path], or one containing actual " -"coordinates with [method get_point_path].\n" -"It is also possible to use non-Euclidean distances. To do so, create a class " -"that extends [AStar3D] and override methods [method _compute_cost] and " -"[method _estimate_cost]. Both take two indices and return a length, as is " -"shown in the following example.\n" -"[codeblocks]\n" -"[gdscript]\n" -"class MyAStar:\n" -" extends AStar3D\n" -"\n" -" func _compute_cost(u, v):\n" -" return abs(u - v)\n" -"\n" -" func _estimate_cost(u, v):\n" -" return min(0, abs(u - v) - 1)\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyAStar : AStar3D\n" -"{\n" -" public override float _ComputeCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Abs((int)(fromId - toId));\n" -" }\n" -"\n" -" public override float _EstimateCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Min(0, Mathf.Abs((int)(fromId - toId)) - 1);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[method _estimate_cost] should return a lower bound of the distance, i.e. " -"[code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. This serves as a " -"hint to the algorithm because the custom [method _compute_cost] might be " -"computation-heavy. If this is not the case, make [method _estimate_cost] " -"return the same value as [method _compute_cost] to provide the algorithm with " -"the most accurate information.\n" -"If the default [method _estimate_cost] and [method _compute_cost] methods are " -"used, or if the supplied [method _estimate_cost] method returns a lower bound " -"of the cost, then the paths returned by A* will be the lowest-cost paths. " -"Here, the cost of a path equals the sum of the [method _compute_cost] results " -"of all segments in the path multiplied by the [code]weight_scale[/code]s of " -"the endpoints of the respective segments. If the default methods are used and " -"the [code]weight_scale[/code]s of all points are set to [code]1.0[/code], " -"then this equals the sum of Euclidean distances of all segments in the path." -msgstr "" -"Is algartam ríomhaireachta é A* (réalta) a úsáidtear chun cosán a lorg agus " -"chun graif a thrasnú, arb é an próiseas chun cosáin ghearra a bhreacadh i " -"measc rinn (pointí), ag dul trí shraith áirithe imeall (deighleoga). " -"Taitníonn úsáid fhorleathan air mar gheall ar a fheidhmíocht agus a " -"chruinneas. Úsáideann cur i bhfeidhm A* Godot pointí i spás 3D agus faid " -"Eoiclídeacha de réir réamhshocraithe.\n" -"Ní mór duit pointí a chur leis de láimh le [method add_point] agus teascáin a " -"chruthú de láimh le [method connect_points]. Nuair a dhéantar é, is féidir " -"leat a thástáil an bhfuil cosán idir dhá phointe leis an bhfeidhm [method " -"are_points_connected], faigh cosán ina bhfuil innéacsanna de réir [method " -"get_id_path], nó ceann ina bhfuil comhordanáidí iarbhír le [method " -"get_point_path].\n" -"Is féidir achair neamh-Eúiclídeacha a úsáid freisin. Chun é sin a dhéanamh, " -"cruthaigh rang a leathnaíonn [AStar3D] agus a sháraíonn modhanna [method " -"_compute_cost] agus [method _estimate_cost]. Tógann an dá innéacs dhá innéacs " -"agus filleann siad fad, mar a léirítear sa sampla seo a leanas.\n" -"[codeblocks]\n" -"[gdscript]\n" -"class MyAStar:\n" -" extends AStar3D\n" -"\n" -" func _compute_cost(u, v):\n" -" return abs(u - v)\n" -"\n" -" func _estimate_cost(u, v):\n" -" return min(0, abs(u - v) - 1)\n" -"[/gdscript]\n" -"[csharp]\n" -"public partial class MyAStar : AStar3D\n" -"{\n" -" public override float _ComputeCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Abs((int)(fromId - toId));\n" -" }\n" -"\n" -" public override float _EstimateCost(long fromId, long toId)\n" -" {\n" -" return Mathf.Min(0, Mathf.Abs((int)(fromId - toId)) - 1);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Ba cheart do [method _estimate_cost] teorainn níos ísle den fhad a thabhairt " -"ar ais, i.e. [code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. " -"Feidhmíonn sé seo mar leid ar an algartam mar go bhféadfadh an saincheaptha " -"[method _compute_cost] a bheith trom ríomh. Mura bhfuil sé seo amhlaidh, déan " -"[method _estimate_cost] an luach céanna a thabhairt ar ais agus [method " -"_compute_cost] chun an t-eolas is cruinne a sholáthar don algartam.\n" -"Má úsáidtear na modhanna réamhshocraithe [method _estimate_cost] agus [method " -"_compute_cost], nó má thugann an modh [method _estimate_cost] a soláthraíodh " -"teorainn níos ísle den chostas ar ais, is iad na cosáin a sheoltar ar ais le " -"A* na cosáin is ísle costais. Anseo, is ionann costas conair agus suim na " -"dtorthaí [method _compute_cost] de gach deighleog sa chonair arna iolrú faoi " -"[code]scála meáchain[/code]anna chríochphointí na ndeighleoga faoi seach. Má " -"úsáidtear na modhanna réamhshocraithe agus má shocraítear [code]scála " -"meáchain[/code]s na bpointí go léir go [code]1.0[/code], ansin is ionann é " -"seo agus suim na n-achar Eiclídeach de gach deighleog sa chonair." - msgid "" "Called when computing the cost between two connected points.\n" "Note that this function is hidden in the default [AStar3D] class." @@ -15335,24 +12498,61 @@ msgstr "" "code]. Is é an suíomh is gaire sa deighleog don phointe tugtha." msgid "" -"Returns an array with the points that are in the path found by AStar3D " -"between the given points. The array is ordered from the starting point to the " -"ending point of the path.\n" -"If there is no valid path to the target, and [param allow_partial_path] is " -"[code]true[/code], returns a path to the point closest to the target that can " -"be reached.\n" -"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it " -"will return an empty array and will print an error message." +"Returns an array with the IDs of the points that form the connection with the " +"given point.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var astar = AStar3D.new()\n" +"astar.add_point(1, Vector3(0, 0, 0))\n" +"astar.add_point(2, Vector3(0, 1, 0))\n" +"astar.add_point(3, Vector3(1, 1, 0))\n" +"astar.add_point(4, Vector3(2, 0, 0))\n" +"\n" +"astar.connect_points(1, 2, true)\n" +"astar.connect_points(1, 3, true)\n" +"\n" +"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n" +"[/gdscript]\n" +"[csharp]\n" +"var astar = new AStar3D();\n" +"astar.AddPoint(1, new Vector3(0, 0, 0));\n" +"astar.AddPoint(2, new Vector3(0, 1, 0));\n" +"astar.AddPoint(3, new Vector3(1, 1, 0));\n" +"astar.AddPoint(4, new Vector3(2, 0, 0));\n" +"astar.ConnectPoints(1, 2, true);\n" +"astar.ConnectPoints(1, 3, true);\n" +"\n" +"long[] neighbors = astar.GetPointConnections(1); // Returns [2, 3]\n" +"[/csharp]\n" +"[/codeblocks]" msgstr "" -"Filleann sé eagar a bhfuil na pointí atá sa chonair aimsithe ag AStar3D idir " -"na pointí tugtha. Ordaítear an t-eagar ón bpointe tosaigh go dtí " -"críochphointe an chosáin.\n" -"Mura bhfuil cosán bailí go dtí an sprioc, agus [param allow_partial_path] is " -"[code]true[/code], filleann sé cosán go dtí an pointe is gaire don sprioc is " -"féidir a bhaint amach.\n" -"[b]Nóta:[/b] Níl an modh seo sábháilte ó thaobh snáitheanna de. Má ghlaoitear " -"air ó [Snáithe], seolfaidh sé eagar folamh ar ais agus priontálfaidh sé " -"teachtaireacht earráide." +"Filleann sé eagar ar a bhfuil IDanna na bpointí a dhéanann an nasc leis an " +"bpointe tugtha.\n" +"[codeblocks]\n" +"[gdscript]\n" +"var astar = AStar3D.new()\n" +"astar.add_point(1, Vector3(0, 0, 0))\n" +"astar.add_point(2, Vector3(0, 1, 0))\n" +"astar.add_point(3, Vector3(1, 1, 0))\n" +"astar.add_point(4, Vector3(2, 0, 0))\n" +"\n" +"astar.connect_points(1, 2, true)\n" +"astar.connect_points(1, 3, true)\n" +"\n" +"var neighbors = astar.get_point_connections(1) # Fill ar ais [2, 3]\n" +"[/gdscript]\n" +"[csharp]\n" +"var astar = new AStar3D();\n" +"astar.AddPoint(1, new Vector3(0, 0, 0));\n" +"astar.AddPoint(2, new Vector3(0, 1, 0));\n" +"astar.AddPoint(3, new Vector3(1, 1, 0));\n" +"astar.AddPoint(4, new Vector3(2, 0, 0));\n" +"astar.ConnectPoints(1, 2, true);\n" +"astar.ConnectPoints(1, 3, true);\n" +"\n" +"long[] neighbors = astar.GetPointConnections(1); // Filleann [2, 3]\n" +"[/csharp]\n" +"[/codeblocks]" msgid "" "Reserves space internally for [param num_nodes] points. Useful if you're " @@ -15371,73 +12571,6 @@ msgstr "" "Cur i bhfeidhm A* chun an cosán is giorra idir dhá phointe a fháil ar eangach " "pháirteach 2T." -msgid "" -"[AStarGrid2D] is a variant of [AStar2D] that is specialized for partial 2D " -"grids. It is simpler to use because it doesn't require you to manually create " -"points and connect them together. This class also supports multiple types of " -"heuristics, modes for diagonal movement, and a jumping mode to speed up " -"calculations.\n" -"To use [AStarGrid2D], you only need to set the [member region] of the grid, " -"optionally set the [member cell_size], and then call the [method update] " -"method:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var astar_grid = AStarGrid2D.new()\n" -"astar_grid.region = Rect2i(0, 0, 32, 32)\n" -"astar_grid.cell_size = Vector2(16, 16)\n" -"astar_grid.update()\n" -"print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, " -"0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, " -"0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/gdscript]\n" -"[csharp]\n" -"AStarGrid2D astarGrid = new AStarGrid2D();\n" -"astarGrid.Region = new Rect2I(0, 0, 32, 32);\n" -"astarGrid.CellSize = new Vector2I(16, 16);\n" -"astarGrid.Update();\n" -"GD.Print(astarGrid.GetIdPath(Vector2I.Zero, new Vector2I(3, 4))); // prints " -"(0, 0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"GD.Print(astarGrid.GetPointPath(Vector2I.Zero, new Vector2I(3, 4))); // " -"prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"To remove a point from the pathfinding grid, it must be set as \"solid\" with " -"[method set_point_solid]." -msgstr "" -"Is leagan de [AStar2D] é [AStarGrid2D] atá speisialaithe do ghreillí " -"páirteacha 2T. Tá sé níos simplí a úsáid mar ní gá duit pointí a chruthú de " -"láimh agus iad a nascadh le chéile. Tacaíonn an rang seo freisin le " -"cineálacha éagsúla heuristics, modhanna do ghluaiseacht trasnánach, agus modh " -"léim chun ríomhaireachtaí a bhrostú.\n" -"Chun [AStarGrid2D] a úsáid, ní gá duit ach [ballréigiún] na heangaí a shocrú, " -"an [member cell_size] a shocrú go roghnach, agus ansin glaoch ar an modh " -"[nuashonrú modh]:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var astar_grid = AStarGrid2D.new()\n" -"astar_grid.region = Rect2i(0, 0, 32, 32)\n" -"astar_grid.cell_size = Veicteoir2(16, 16)\n" -"astar_grid.nuashonraigh()\n" -"print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # prionta (0, " -"0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # prionta " -"(0, 0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/gdscript]\n" -"[csharp]\n" -"AStarGrid2D astarGrid = AStarGrid2D nua();\n" -"astarGrid.Region = nua Rect2I(0, 0, 32, 32);\n" -"astarGrid.CellSize = nua Vector2I(16, 16);\n" -"astarGrid.Update();\n" -"GD.Print(astarGrid.GetIdPath(Vector2I.Zero, Vector2I(3, 4)) nua); // priontaí " -"(0, 0), (1, 1), (2, 2), (3, 3), (3, 4)\n" -"GD.Print(astarGrid.GetPointPath(Vector2I.Zero, Vector2I(3, 4)) nua); // " -"priontaí (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Chun pointe a bhaint den ghreille conartha, ní mór é a shocrú mar " -"\"soladach\" le [method set_point_solid]." - msgid "" "Called when computing the cost between two connected points.\n" "Note that this function is hidden in the default [AStarGrid2D] class." @@ -15484,41 +12617,6 @@ msgstr "" "[b]Nóta:[/b] Ní gá glao a chur ar [method nuashonraithe] tar éis ghlao na " "feidhme seo." -msgid "" -"Returns an array with the IDs of the points that form the path found by " -"AStar2D between the given points. The array is ordered from the starting " -"point to the ending point of the path.\n" -"If there is no valid path to the target, and [param allow_partial_path] is " -"[code]true[/code], returns a path to the point closest to the target that can " -"be reached." -msgstr "" -"Filleann sé eagar le haitheantas na bpointí a fhoirmíonn an chonair aimsithe " -"ag AStar2D idir na pointí tugtha. Ordaítear an t-eagar ón bpointe tosaigh go " -"dtí críochphointe an chosáin.\n" -"Mura bhfuil cosán bailí go dtí an sprioc, agus [param allow_partial_path] is " -"[code]true[/code], filleann sé cosán go dtí an pointe is gaire don sprioc is " -"féidir a bhaint amach." - -msgid "" -"Returns an array with the points that are in the path found by [AStarGrid2D] " -"between the given points. The array is ordered from the starting point to the " -"ending point of the path.\n" -"If there is no valid path to the target, and [param allow_partial_path] is " -"[code]true[/code], returns a path to the point closest to the target that can " -"be reached.\n" -"[b]Note:[/b] This method is not thread-safe. If called from a [Thread], it " -"will return an empty array and will print an error message." -msgstr "" -"Filleann sé eagar ar a bhfuil na pointí atá sa chonair aimsithe ag " -"[AStarGrid2D] idir na pointí tugtha. Ordaítear an t-eagar ón bpointe tosaigh " -"go dtí críochphointe an chosáin.\n" -"Mura bhfuil cosán bailí go dtí an sprioc, agus [param allow_partial_path] is " -"[code]true[/code], filleann sé cosán go dtí an pointe is gaire don sprioc is " -"féidir a bhaint amach.\n" -"[b]Nóta:[/b] Níl an modh seo sábháilte ó thaobh snáitheanna de. Má ghlaoitear " -"air ó [Snáithe], seolfaidh sé eagar folamh ar ais agus priontálfaidh sé " -"teachtaireacht earráide." - msgid "" "Indicates that the grid parameters were changed and [method update] needs to " "be called." @@ -15815,28 +12913,6 @@ msgstr "Léiríonn sé méid an [enum CellShape] enum." msgid "A texture that crops out part of another Texture2D." msgstr "Uigeacht a sháraíonn cuid de Texture2D eile." -msgid "" -"[Texture2D] resource that draws only part of its [member atlas] texture, as " -"defined by the [member region]. An additional [member margin] can also be " -"set, which is useful for small adjustments.\n" -"Multiple [AtlasTexture] resources can be cropped from the same [member " -"atlas]. Packing many smaller textures into a singular large texture helps to " -"optimize video memory costs and render calls.\n" -"[b]Note:[/b] [AtlasTexture] cannot be used in an [AnimatedTexture], and may " -"not tile properly in nodes such as [TextureRect], when inside other " -"[AtlasTexture] resources." -msgstr "" -"Acmhainn [Texture2D] nach dtarraingíonn ach cuid dá uigeacht [ball atlas], " -"mar atá sainmhínithe ag an [ballréigiún]. Is féidir [corrlach ball] breise a " -"shocrú freisin, atá úsáideach le haghaidh coigeartuithe beaga.\n" -"Is féidir acmhainní iolracha [AtlasTexture] a bhearradh ón [ball atlas] " -"céanna. Cuidíonn go leor uigeachtaí níos lú a phacáil isteach in uigeacht " -"mhór uatha chun costais chuimhne físeáin a bharrfheabhsú agus glaonna a " -"sholáthar.\n" -"[b]Nóta:[/b] Ní féidir [AtlasTexture] a úsáid in [Uigeacht Bheoite], agus ní " -"féidir é a leacú i gceart i nóid mar [TextureRect], agus é laistigh " -"d’acmhainní eile [AtlasTexture]." - msgid "" "The texture that contains the atlas. Can be any type inheriting from " "[Texture2D], including another [AtlasTexture]." @@ -16968,22 +14044,6 @@ msgid "Audio effect that can be used for real-time audio visualizations." msgstr "" "Éifeacht fuaime is féidir a úsáid le haghaidh léirshamhlú fuaime fíor-ama." -msgid "" -"This audio effect does not affect sound output, but can be used for real-time " -"audio visualizations.\n" -"This resource configures an [AudioEffectSpectrumAnalyzerInstance], which " -"performs the actual analysis at runtime. An instance can be acquired with " -"[method AudioServer.get_bus_effect_instance].\n" -"See also [AudioStreamGenerator] for procedurally generating sounds." -msgstr "" -"Ní chuireann an éifeacht fuaime seo isteach ar aschur fuaime, ach is féidir é " -"a úsáid le haghaidh léirshamhlú fuaime fíor-ama.\n" -"Cumraíonn an acmhainn seo [AudioEffectSpectrumAnalyzerInstance], a dhéanann " -"an anailís iarbhír ag am rite. Is féidir sampla a fháil le [method " -"AudioServer.get_bus_effect_instance].\n" -"Féach freisin [AudioStreamGenerator] chun fuaimeanna a ghiniúint go nós " -"imeachta." - msgid "Audio Spectrum Visualizer Demo" msgstr "Taispeántas Amharcléiritheoir Speictrim Fuaime" @@ -17011,17 +14071,6 @@ msgstr "" msgid "Queryable instance of an [AudioEffectSpectrumAnalyzer]." msgstr "Sampla incheistithe de [AudioEffectSpectrumAnalyzer]." -msgid "" -"The runtime part of an [AudioEffectSpectrumAnalyzer], which can be used to " -"query the magnitude of a frequency range on its host bus.\n" -"An instance of this class can be acquired with [method AudioServer." -"get_bus_effect_instance]." -msgstr "" -"An chuid ama rite de [AudioEffectSpectrumAnalyzer], ar féidir a úsáid chun " -"ceist a chur faoi mhéid raon minicíochta ar a bhus ósta.\n" -"Is féidir sampla den aicme seo a fháil le [method AudioServer." -"get_bus_effect_instance]." - msgid "" "Returns the magnitude of the frequencies from [param from_hz] to [param " "to_hz] in linear energy as a Vector2. The [code]x[/code] component of the " @@ -17048,15 +14097,6 @@ msgid "" msgstr "" "Éifeacht fuaime is féidir a úsáid chun déine na panning steirió a choigeartú." -msgid "" -"Values greater than 1.0 increase intensity of any panning on audio passing " -"through this effect, whereas values less than 1.0 will decrease the panning " -"intensity. A value of 0.0 will downmix audio to mono." -msgstr "" -"Méadaíonn luachanna níos mó ná 1.0 déine aon phinneála ar fhuaim a théann " -"tríd an iarmhairt seo, ach laghdóidh luachanna níos lú ná 1.0 an déine " -"panning. Laghdóidh luach 0.0 an fhuaim go mona." - msgid "Overrides the location sounds are heard from." msgstr "Sáraíonn an suíomh a chloistear fuaimeanna ó." @@ -17348,11 +14388,6 @@ msgstr "" "Nascann sé aschur an bhus ag [param bus_idx] leis an mbus darb ainm [param " "send]." -msgid "" -"Sets the volume of the bus at index [param bus_idx] to [param volume_db]." -msgstr "" -"Socraíonn sé toirt an bhus ag innéacs [param bus_idx] go [param volume_db]." - msgid "" "If set to [code]true[/code], all instances of [AudioStreamPlayback] will call " "[method AudioStreamPlayback._tag_used_streams] every mix step.\n" @@ -17550,15 +14585,6 @@ msgstr "" "Sáraigh an modh seo chun an t-ainm a shanntar don sruth fuaime seo a " "shaincheapadh. Gan úsáid ag an inneall." -msgid "" -"Override this method to customize the returned value of [method " -"instantiate_playback]. Should returned a new [AudioStreamPlayback] created " -"when the stream is played (such as by an [AudioStreamPlayer]).." -msgstr "" -"Sáraigh an modh seo chun an luach aischurtha de [method instantiate_playback] " -"a shaincheapadh. Ba cheart [AudioStreamPlayback] nua a cuireadh ar ais a " -"cruthaíodh nuair a sheinntear an sruth (mar shampla le [AudioStreamPlayer])." - msgid "" "Override this method to customize the returned value of [method " "is_monophonic]. Should return [code]true[/code] if this audio stream only " @@ -17619,147 +14645,6 @@ msgstr "" msgid "An audio stream with utilities for procedural sound generation." msgstr "Sruth fuaime le fóntais chun fuaim nós imeachta a ghiniúint." -msgid "" -"[AudioStreamGenerator] is a type of audio stream that does not play back " -"sounds on its own; instead, it expects a script to generate audio data for " -"it. See also [AudioStreamGeneratorPlayback].\n" -"Here's a sample on how to use it to generate a sine wave:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var playback # Will hold the AudioStreamGeneratorPlayback.\n" -"@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate\n" -"var pulse_hz = 440.0 # The frequency of the sound wave.\n" -"\n" -"func _ready():\n" -" $AudioStreamPlayer.play()\n" -" playback = $AudioStreamPlayer.get_stream_playback()\n" -" fill_buffer()\n" -"\n" -"func fill_buffer():\n" -" var phase = 0.0\n" -" var increment = pulse_hz / sample_hz\n" -" var frames_available = playback.get_frames_available()\n" -"\n" -" for i in range(frames_available):\n" -" playback.push_frame(Vector2.ONE * sin(phase * TAU))\n" -" phase = fmod(phase + increment, 1.0)\n" -"[/gdscript]\n" -"[csharp]\n" -"[Export] public AudioStreamPlayer Player { get; set; }\n" -"\n" -"private AudioStreamGeneratorPlayback _playback; // Will hold the " -"AudioStreamGeneratorPlayback.\n" -"private float _sampleHz;\n" -"private float _pulseHz = 440.0f; // The frequency of the sound wave.\n" -"\n" -"public override void _Ready()\n" -"{\n" -" if (Player.Stream is AudioStreamGenerator generator) // Type as a " -"generator to access MixRate.\n" -" {\n" -" _sampleHz = generator.MixRate;\n" -" Player.Play();\n" -" _playback = (AudioStreamGeneratorPlayback)Player." -"GetStreamPlayback();\n" -" FillBuffer();\n" -" }\n" -"}\n" -"\n" -"public void FillBuffer()\n" -"{\n" -" double phase = 0.0;\n" -" float increment = _pulseHz / _sampleHz;\n" -" int framesAvailable = _playback.GetFramesAvailable();\n" -"\n" -" for (int i = 0; i < framesAvailable; i++)\n" -" {\n" -" _playback.PushFrame(Vector2.One * (float)Mathf.Sin(phase * Mathf." -"Tau));\n" -" phase = Mathf.PosMod(phase + increment, 1.0);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"In the example above, the \"AudioStreamPlayer\" node must use an " -"[AudioStreamGenerator] as its stream. The [code]fill_buffer[/code] function " -"provides audio data for approximating a sine wave.\n" -"See also [AudioEffectSpectrumAnalyzer] for performing real-time audio " -"spectrum analysis.\n" -"[b]Note:[/b] Due to performance constraints, this class is best used from C# " -"or from a compiled language via GDExtension. If you still want to use this " -"class from GDScript, consider using a lower [member mix_rate] such as 11,025 " -"Hz or 22,050 Hz." -msgstr "" -"Is cineál srutha fuaime é [AudioStreamGenerator] nach n-imríonn fuaimeanna " -"siar leis féin; ina ionad sin, tá sé ag súil le script chun sonraí fuaime a " -"ghiniúint dó. Féach freisin [AudioStreamGeneratorPlayback].\n" -"Seo sampla ar conas é a úsáid chun sínistonn a ghiniúint:\n" -"[codeblocks]\n" -"[gdscript]\n" -"var playback # Sealbhófar an AudioStreamGeneratorPlayback.\n" -"@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate\n" -"var pulse_hz = 440.0 # Minicíocht na toinne fuaime.\n" -"\n" -"func _ready():\n" -" $AudioStreamPlayer.play()\n" -" playback = $AudioStreamPlayer.get_stream_playback()\n" -" fill_buffer()\n" -"\n" -"func fill_buffer():\n" -" var phase = 0.0\n" -" var increment = pulse_hz / sample_hz\n" -" var frames_available = playback.get_frames_available()\n" -"\n" -" for i in range(frames_available):\n" -" playback.push_frame(Vector2.ONE * sin(phase * TAU))\n" -" phase = fmod(phase + increment, 1.0)\n" -"[/gdscript]\n" -"[csharp]\n" -"[Export] public AudioStreamPlayer Player { get; set; }\n" -"\n" -"private AudioStreamGeneratorPlayback _playback; // Sealbhóidh an " -"AudioStreamGeneratorPlayback.\n" -"private float _sampleHz;\n" -"private float _pulseHz = 440.0f; // Minicíocht na toinne fuaime.\n" -"\n" -"public override void _Ready()\n" -"{\n" -" if (Player.Stream is AudioStreamGenerator generator) // Cineál mar " -"ghineadóir chun rochtain a fháil ar MixRate.\n" -" {\n" -" _sampleHz = generator.MixRate;\n" -" Player.Play();\n" -" _playback = (AudioStreamGeneratorPlayback)Player." -"GetStreamPlayback();\n" -" FillBuffer();\n" -" }\n" -"}\n" -"\n" -"public void FillBuffer()\n" -"{\n" -" double phase = 0.0;\n" -" float increment = _pulseHz / _sampleHz;\n" -" int framesAvailable = _playback.GetFramesAvailable();\n" -"\n" -" for (int i = 0; i < framesAvailable; i++)\n" -" {\n" -" _playback.PushFrame(Vector2.One * (float)Mathf.Sin(phase * Mathf." -"Tau));\n" -" phase = Mathf.PosMod(phase + increment, 1.0);\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Sa sampla thuas, ní mór don nód \"AudioStreamPlayer\" [AudioStreamGenerator] " -"a úsáid mar shruth. Soláthraíonn an fheidhm [code]fill_maolán[/code] sonraí " -"fuaime chun sínistonn a chomhfhogasú.\n" -"Féach freisin [AudioEffectSpectrumAnalyzer] chun anailís speictrim fuaime " -"fíor-ama a dhéanamh.\n" -"[b]Nóta:[/b] Mar gheall ar shrianta feidhmíochta, is fearr an aicme seo a " -"úsáid ó C# nó ó theanga tiomsaithe trí GDE Extension. Má tá tú fós ag " -"iarraidh an rang seo a úsáid ó GDScript, smaoinigh ar [member mix_rate] níos " -"ísle a úsáid mar 11,025 Hz nó 22,050 Hz." - msgid "" "The length of the buffer to generate (in seconds). Lower values result in " "less latency, but require the script to generate audio data faster, resulting " @@ -17868,29 +14753,6 @@ msgstr "" "Sruth fuaime lenar féidir ceol a athsheinm go hidirghníomhach, a " "chomhcheanglaíonn gearrthóga agus tábla trasdula." -msgid "" -"This is an audio stream that can playback music interactively, combining " -"clips and a transition table. Clips must be added first, and the transition " -"rules via the [method add_transition]. Additionally, this stream export a " -"property parameter to control the playback via [AudioStreamPlayer], " -"[AudioStreamPlayer2D], or [AudioStreamPlayer3D].\n" -"The way this is used is by filling a number of clips, then configuring the " -"transition table. From there, clips are selected for playback and the music " -"will smoothly go from the current to the new one while using the " -"corresponding transition rule defined in the transition table." -msgstr "" -"Is sruth fuaime é seo ar féidir ceol a athsheinm go hidirghníomhach, ag " -"comhcheangal gearrthóga agus tábla trasdula. Ní mór gearrthóga a chur leis ar " -"dtús, agus na rialacha aistrithe tríd an [method add_transition]. Ina " -"theannta sin, easpórtálann an sruth seo paraiméadar airí chun an athsheinm a " -"rialú trí [AudioStreamPlayer], [AudioStreamPlayer2D], nó " -"[AudioStreamPlayer3D].\n" -"Is é an bealach a úsáidtear é seo trí roinnt gearrthóga a líonadh, ansin an " -"tábla aistrithe a chumrú. Ón áit sin, roghnaítear gearrthóga le haghaidh " -"athsheinm agus rachaidh an ceol go réidh ón sruth go dtí an ceann nua agus " -"úsáid á baint as an riail aistrithe comhfhreagrach atá sainithe sa tábla " -"aistrithe." - msgid "" "Add a transition between two clips. Provide the indices of the source and " "destination clips, or use the [constant CLIP_ANY] constant to indicate that " @@ -17989,13 +14851,6 @@ msgstr "" "Tabhair ar ais suíomh an chinn scríbe le haghaidh trasdula (féach [method " "add_transition])." -msgid "" -"Return true if a given transition exists (was added via [method " -"add_transition])." -msgstr "" -"Seol ar ais fíor má tá trasdul áirithe ann (cuireadh leis trí [method " -"add_transition])." - msgid "" "Return whether a transition uses the [i]hold previous[/i] functionality (see " "[method add_transition])." @@ -18147,13 +15002,6 @@ msgstr "Taifid Fuaime Mic" msgid "MP3 audio stream driver." msgstr "Tiománaí fuaime MP3 sruth." -msgid "" -"MP3 audio stream driver. See [member data] if you want to load an MP3 file at " -"run-time." -msgstr "" -"Tiománaí fuaime MP3 sruth. Féach ar [sonraí ball] más mian leat comhad MP3 a " -"luchtú ag am rite." - msgid "" "Contains the audio data in bytes.\n" "You can load a file without having to import it beforehand using the code " @@ -18233,20 +15081,6 @@ msgstr "" msgid "Runtime file loading and saving" msgstr "Comhad ama rite á luchtú agus á shábháil" -msgid "" -"Creates a new AudioStreamOggVorbis instance from the given buffer. The buffer " -"must contain Ogg Vorbis data." -msgstr "" -"Cruthaítear sampla nua AudioStreamOggVorbis ón maolán a thugtar. Caithfidh " -"sonraí Ogg Vorbis a bheith sa mhaolán." - -msgid "" -"Creates a new AudioStreamOggVorbis instance from the given file path. The " -"file must be in Ogg Vorbis format." -msgstr "" -"Cruthaíonn sé sampla nua AudioStreamOggVorbis ón gcosán comhaid a thugtar. " -"Caithfidh an comhad a bheith i bhformáid Ogg Vorbis." - msgid "" "If [code]true[/code], the audio will play again from the specified [member " "loop_offset] once it is done playing. Useful for ambient sounds and " @@ -18405,15 +15239,6 @@ msgstr "" "AudioStreamPlayer2D.get_stream_methodback] nó [method AudioStreamPlayer2D." "get_stream_methodback] Modhanna AudioStreamPlayer3D.get_stream_playback]." -msgid "" -"Return true whether the stream associated with an integer ID is still " -"playing. Check [method play_stream] for information on when this ID becomes " -"invalid." -msgstr "" -"Fill fíor cibé an bhfuil an sruth a bhaineann le haitheantas slánuimhir fós " -"ag imirt. Seiceáil [method play_stream] le haghaidh faisnéise maidir le " -"cathain a éiríonn an t-aitheantas seo neamhbhailí." - msgid "" "Play an [AudioStream] at a given offset, volume, pitch scale, playback type, " "and bus. Playback starts immediately.\n" @@ -18486,20 +15311,6 @@ msgstr "" "Más gá duit fuaim a sheinm ag suíomh ar leith, úsáid [AudioStreamPlayer2D] nó " "[AudioStreamPlayer3D] ina ionad sin." -msgid "" -"Returns the position in the [AudioStream] of the latest sound, in seconds. " -"Returns [code]0.0[/code] if no sounds are playing.\n" -"[b]Note:[/b] The position is not always accurate, as the [AudioServer] does " -"not mix audio every processed frame. To get more accurate results, add " -"[method AudioServer.get_time_since_last_mix] to the returned position." -msgstr "" -"Filleann sé suíomh na fuaime is déanaí sa [AudioStream], i soicindí. Filleann " -"sé [code]0.0[/code] mura bhfuil aon fhuaim ag seinnt.\n" -"[b]Nóta:[/b] Ní bhíonn an suíomh cruinn i gcónaí, mar ní mheascann an " -"[Fuaimfhreastalaí] fuaim gach fráma próiseáilte. Chun torthaí níos cruinne a " -"fháil, cuir [method AudioServer.get_time_since_last_mix] leis an suíomh a " -"cuireadh ar ais." - msgid "" "Returns the latest [AudioStreamPlayback] of this node, usually the most " "recently created by [method play]. If no sounds are playing, this method " @@ -18612,19 +15423,6 @@ msgstr "" "ag dul isteach sa chrann, nó tá an nód seo ar sos (féach [member Node." "process_mode])." -msgid "" -"Volume of sound, in decibel. This is an offset of the [member stream]'s " -"volume.\n" -"[b]Note:[/b] To convert between decibel and linear energy (like most volume " -"sliders do), use [method @GlobalScope.db_to_linear] and [method @GlobalScope." -"linear_to_db]." -msgstr "" -"Toirt fuaime, i ndeicibeilí. Is fritháireamh é seo ar thoirt an [sruth " -"ball].\n" -"[b] Nóta:[/b] Chun tiontú idir decibeil agus fuinneamh líneach (mar a " -"dhéanann an chuid is mó de na sleamhnáin toirte), úsáid [method @GlobalScope." -"db_to_linear] agus [method @GlobalScope.linear_to_db]." - msgid "" "Emitted when a sound finishes playing without interruptions. This signal is " "[i]not[/i] emitted when calling [method stop], or when exiting the tree while " @@ -18781,9 +15579,6 @@ msgstr "" "Más [code]true[/code], cuirtear an t-athsheinm ar sos. Is féidir leat é a " "atosú trí [member stream_paused] a shocrú go [code]false[/code]." -msgid "Base volume before attenuation." -msgstr "Bunmhéid roimh mhaolú." - msgid "Emitted when the audio stops playing." msgstr "Astaithe nuair a stopann an fhuaim ag seinm." @@ -19162,17 +15957,6 @@ msgid "" "Stream that can be fitted with sub-streams, which will be played in-sync." msgstr "Sruth is féidir a fheistiú le fo-sruthanna, a imirt i-sync." -msgid "" -"This is a stream that can be fitted with sub-streams, which will be played in-" -"sync. The streams being at exactly the same time when play is pressed, and " -"will end when the last of them ends. If one of the sub-streams loops, then " -"playback will continue." -msgstr "" -"Is sruth é seo is féidir a fheistiú le fo-sruthanna, a sheinfear i sioncronú. " -"Bíonn na sruthanna ag an am díreach céanna nuair a bhíonn an súgradh brúite, " -"agus tiocfaidh deireadh leis nuair a chríochnaíonn an ceann deireanach acu. " -"Má lúb ar cheann de na fo-sruthanna, ansin beidh athsheinm ar aghaidh." - msgid "Get one of the synchronized streams, by index." msgstr "Faigh ceann de na sruthanna sioncronaithe, de réir innéacs." @@ -19210,55 +15994,9 @@ msgstr "" "dinimiciúil a stóráil. Féach freisin [AudioStreamGenerator] le haghaidh " "giniúint fuaime nós imeachta." -msgid "" -"Saves the AudioStreamWAV as a WAV file to [param path]. Samples with IMA " -"ADPCM or QOA formats can't be saved.\n" -"[b]Note:[/b] A [code].wav[/code] extension is automatically appended to " -"[param path] if it is missing." -msgstr "" -"Sábhálann an AudioStreamWAV mar chomhad WAV chuig [cosán param]. Ní féidir " -"samplaí le formáidí IMA ADPCM nó QOA a shábháil.\n" -"[b]Nóta:[/b] Cuirtear síneadh [code].wav[/code] i gceangal go huathoibríoch " -"le [cosán param] má tá sé in easnamh." - -msgid "" -"Contains the audio data in bytes.\n" -"[b]Note:[/b] This property expects signed PCM8 data. To convert unsigned PCM8 " -"to signed PCM8, subtract 128 from each byte." -msgstr "" -"Tá na sonraí fuaime i mbearta.\n" -"[b]Nóta:[/b] Tá an t-airí seo ag súil le sonraí PCM8 sínithe. Chun PCM8 gan " -"síniú a thiontú go PCM8 sínithe, bain 128 ó gach beart." - msgid "Audio format. See [enum Format] constants for values." msgstr "Formáid fuaime. Féach tairisigh [enum Formáid] le haghaidh luachanna." -msgid "" -"The loop start point (in number of samples, relative to the beginning of the " -"stream). This information will be imported automatically from the WAV file if " -"present." -msgstr "" -"Túsphointe an lúb (i líon na samplaí, i gcoibhneas le tús an tsrutha). " -"Déanfar an fhaisnéis seo a allmhairiú go huathoibríoch ón gcomhad WAV má tá " -"sé i láthair." - -msgid "" -"The loop end point (in number of samples, relative to the beginning of the " -"stream). This information will be imported automatically from the WAV file if " -"present." -msgstr "" -"Pointe deiridh an lúb (i líon na samplaí, i gcoibhneas le tús an tsrutha). " -"Déanfar an fhaisnéis seo a allmhairiú go huathoibríoch ón gcomhad WAV má tá " -"sé i láthair." - -msgid "" -"The loop mode. This information will be imported automatically from the WAV " -"file if present. See [enum LoopMode] constants for values." -msgstr "" -"An modh lúb. Déanfar an fhaisnéis seo a allmhairiú go huathoibríoch ón " -"gcomhad WAV má tá sé i láthair. Féach tairisigh [enum LoopMode] le haghaidh " -"luachanna." - msgid "" "The sample rate for mixing this audio. Higher values require more storage " "space, but result in better quality.\n" @@ -19291,21 +16029,6 @@ msgstr "" msgid "If [code]true[/code], audio is stereo." msgstr "Más [code]true[/code], is steirió í an fhuaim." -msgid "8-bit audio codec." -msgstr "Codec fuaime 8-giotán íosluchtaigh." - -msgid "16-bit audio codec." -msgstr "Codec fuaime 16-giotán íosluchtaigh." - -msgid "Audio is compressed using IMA ADPCM." -msgstr "Déantar an fhuaim a chomhbhrú le IMA ADPCM." - -msgid "" -"Audio is compressed as QOA ([url=https://qoaformat.org/]Quite OK Audio[/url])." -msgstr "" -"Déantar an fhuaim a chomhbhrú mar QOA ([url=https://qoaformat.org/]Fuaim go " -"leor ceart go leor[/url])." - msgid "Audio does not loop." msgstr "Ní lúbann an fhuaim." @@ -19468,22 +16191,6 @@ msgstr "" "Chun an cliceáil ar chlé agus ar dheis-cliceáil a cheadú, úsáid " "[code]MOUSE_BUTTON_MASK_LEFT | MOUSE_BUTTON_MASK_RIGHT[/code]." -msgid "" -"If [code]true[/code], the button's state is pressed. Means the button is " -"pressed down or toggled (if [member toggle_mode] is active). Only works if " -"[member toggle_mode] is [code]true[/code].\n" -"[b]Note:[/b] Setting [member button_pressed] will result in [signal toggled] " -"to be emitted. If you want to change the pressed state without emitting that " -"signal, use [method set_pressed_no_signal]." -msgstr "" -"Má tá [code]true[/code], brúitear staid an chnaipe. Ciallaíonn sé seo go " -"bhfuil an cnaipe brúite síos nó scoránaigh (má tá [ball toggle_mode] " -"gníomhach). Ní oibríonn sé ach amháin más [code]true[/code] é [ball " -"toggle_mode].\n" -"[b]Nóta:[/b] Má shocraítear [ball button_pressed] beidh [comhartha " -"scoránaigh] le hastú. Más mian leat an staid brúite a athrú gan an comhartha " -"sin a astú, úsáid [method set_pressed_no_signal]." - msgid "" "If [code]true[/code], the button is in disabled state and can't be clicked or " "toggled." @@ -19518,13 +16225,6 @@ msgstr "" "[member toggle_mode] [code]false[/code], gníomhóidh an t-aicearra gan aon " "aiseolas amhairc." -msgid "" -"If [code]true[/code], the button will add information about its shortcut in " -"the tooltip." -msgstr "" -"Más [code]true[/code], cuirfidh an cnaipe faisnéis faoina aicearra sa leid " -"uirlisí." - msgid "" "If [code]true[/code], the button is in toggle mode. Makes the button flip " "state between pressed and unpressed each time its area is clicked." @@ -19747,26 +16447,6 @@ msgstr "" "anisotropy_flowmap] má shainítear uigeacht ann agus má tá cainéal alfa san " "uigeacht." -msgid "" -"If [code]true[/code], anisotropy is enabled. Anisotropy changes the shape of " -"the specular blob and aligns it to tangent space. This is useful for brushed " -"aluminium and hair reflections.\n" -"[b]Note:[/b] Mesh tangents are needed for anisotropy to work. If the mesh " -"does not contain tangents, the anisotropy effect will appear broken.\n" -"[b]Note:[/b] Material anisotropy should not to be confused with anisotropic " -"texture filtering, which can be enabled by setting [member texture_filter] to " -"[constant TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC]." -msgstr "" -"Más [code]true[/code], tá aniseatrópacht cumasaithe. Athraíonn anisotrópacht " -"cruth an bhloba speictreach agus ailíníonn sé le spás tadhlaí. Tá sé seo " -"úsáideach le haghaidh machnaimh alúmanaim brushed agus gruaige.\n" -"[b]Nóta:[/b] Tá tadhlaí mogaill ag teastáil le go n-oibreoidh aniseatrópacht. " -"Mura bhfuil tadhlaí sa mhogalra, beidh an chuma ar an éifeacht anisotrópachta " -"briste.\n" -"[b]Nóta:[/b] Níor cheart aniseatrópacht ábhair a mheascadh suas le scagadh " -"uigeachta anisotrópach, ar féidir é a chumasú trí [member texture_filter] a " -"shocrú go [TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTOPIC]." - msgid "" "Texture that offsets the tangent map for anisotropy calculations and " "optionally controls the anisotropy effect (if an alpha channel is present). " @@ -19876,33 +16556,6 @@ msgstr "" "seo ach amháin nuair nach bhfuil [ball billboard_mode] [BILLBOARD_DISABLED] " "leanúnach." -msgid "" -"Controls how the object faces the camera. See [enum BillboardMode].\n" -"[b]Note:[/b] When billboarding is enabled and the material also casts " -"shadows, billboards will face [b]the[/b] camera in the scene when rendering " -"shadows. In scenes with multiple cameras, the intended shadow cannot be " -"determined and this will result in undefined behavior. See [url=https://" -"github.com/godotengine/godot/pull/72638]GitHub Pull Request #72638[/url] for " -"details.\n" -"[b]Note:[/b] Billboard mode is not suitable for VR because the left-right " -"vector of the camera is not horizontal when the screen is attached to your " -"head instead of on the table. See [url=https://github.com/godotengine/godot/" -"issues/41567]GitHub issue #41567[/url] for details." -msgstr "" -"Rialaíonn sé an chaoi a dtugann an réad aghaidh ar an gceamara. Féach [enum " -"BillboardMode].\n" -"[b]Nóta:[/b] Nuair atá clár fógraí cumasaithe agus nuair a bhíonn an t-ábhar " -"ag caitheamh scáthanna freisin, tabharfaidh cláir fógraí aghaidh [b] an[/b] " -"ceamara sa radharc agus scáthanna á rindreáil. I radhairc le ceamaraí " -"iolracha, ní féidir an scáth atá beartaithe a chinneadh agus beidh iompar " -"neamhshainithe mar thoradh air. Féach [url=https://github.com/godotenginine/" -"godot/pull/72638]Iarratas Tarraingthe GitHub #72638[/url] le haghaidh " -"sonraí.\n" -"[b]Nóta:[/b] Níl mód cláir fhógraí oiriúnach do VR toisc nach bhfuil " -"veicteoir ar chlé an cheamara cothrománach nuair atá an scáileán ceangailte " -"de do cheann seachas ar an mbord. Féach [url=https://github.com/godotenginine/" -"godot/issues/41567]eisiúint GitHub #41567[/url] le haghaidh sonraí." - msgid "" "The material's blend mode.\n" "[b]Note:[/b] Values other than [code]Mix[/code] force the object into the " @@ -20527,13 +17180,6 @@ msgstr "" "Maireann an éifeacht céimnithe cóngarachta gach picteilín bunaithe ar a fhad " "le réad eile." -msgid "" -"If [code]true[/code], the refraction effect is enabled. Distorts transparency " -"based on light from behind the object." -msgstr "" -"Más [code]true[/code], tá an éifeacht athraonta cumasaithe. Déanann sé " -"trédhearcacht a shaobhadh bunaithe ar sholas ón taobh thiar den rud." - msgid "The strength of the refraction effect." msgstr "Neart an éifeacht athraonta." @@ -20618,22 +17264,6 @@ msgstr "" "comhthimpeallach sa ghlas d'fhéadfá líon na n-uigeachtaí a úsáideann tú a " "laghdú." -msgid "" -"Sets whether the shading takes place, per-pixel, per-vertex or unshaded. Per-" -"vertex lighting is faster, making it the best choice for mobile applications, " -"however it looks considerably worse than per-pixel. Unshaded rendering is the " -"fastest, but disables all interactions with lights.\n" -"[b]Note:[/b] Setting the shading mode vertex shading currently has no effect, " -"as vertex shading is not implemented yet." -msgstr "" -"Socraíonn sé cé acu an bhfuil an scáthú ar siúl, in aghaidh an picteilín, in " -"aghaidh an rinn nó gan scáthú. Tá soilsiú in aghaidh an rinn níos tapúla, rud " -"a fhágann gurb é an rogha is fearr le haghaidh feidhmchláir shoghluaiste, ach " -"tá cuma i bhfad níos measa air ná in aghaidh an picteilín. Is é rindreáil gan " -"scáth an ceann is tapúla, ach díchumasaítear gach idirghníomhú le soilse.\n" -"[b]Nóta:[/b] Ag socrú an mhodha scáthaithe níl aon éifeacht ag scáthú rinn " -"faoi láthair, toisc nach bhfuil scáthú rinn curtha i bhfeidhm fós." - msgid "" "If [code]true[/code], enables the \"shadow to opacity\" render mode where " "lighting modifies the alpha so shadowed areas are opaque and non-shadowed " @@ -21156,15 +17786,6 @@ msgstr "" "Beidh an réad scáthaithe in aghaidh an picteilín. Úsáideach le haghaidh " "éifeachtaí scáthaithe réalaíocha." -msgid "" -"The object will be shaded per vertex. Useful when you want cheaper shaders " -"and do not care about visual quality. Not implemented yet (this mode will act " -"like [constant SHADING_MODE_PER_PIXEL])." -msgstr "" -"Beidh an réad scáthaithe in aghaidh an rinn. Úsáideach nuair is mian leat " -"shaders níos saoire agus nach bhfuil cúram faoi cháilíocht amhairc. Níl sé " -"curtha i bhfeidhm fós (feidhmeoidh an mód seo mar [SHADING_MODE_PER_PIXEL])." - msgid "Represents the size of the [enum ShadingMode] enum." msgstr "Léiríonn sé méid an [enum ShadingMode] enum." @@ -21577,71 +18198,6 @@ msgstr "" msgid "A 3×3 matrix for representing 3D rotation and scale." msgstr "Maitrís 3×3 chun rothlú agus scála 3D a léiriú." -msgid "" -"The [Basis] built-in [Variant] type is a 3×3 [url=https://en.wikipedia.org/" -"wiki/Matrix_(mathematics)]matrix[/url] used to represent 3D rotation, scale, " -"and shear. It is frequently used within a [Transform3D].\n" -"A [Basis] is composed by 3 axis vectors, each representing a column of the " -"matrix: [member x], [member y], and [member z]. The length of each axis " -"([method Vector3.length]) influences the basis's scale, while the direction " -"of all axes influence the rotation. Usually, these axes are perpendicular to " -"one another. However, when you rotate any axis individually, the basis " -"becomes sheared. Applying a sheared basis to a 3D model will make the model " -"appear distorted.\n" -"A [Basis] is [b]orthogonal[/b] if its axes are perpendicular to each other. A " -"basis is [b]normalized[/b] if the length of every axis is [code]1[/code]. A " -"basis is [b]uniform[/b] if all axes share the same length (see [method " -"get_scale]). A basis is [b]orthonormal[/b] if it is both orthogonal and " -"normalized, which allows it to only represent rotations. A basis is " -"[b]conformal[/b] if it is both orthogonal and uniform, which ensures it is " -"not distorted.\n" -"For a general introduction, see the [url=$DOCS_URL/tutorials/math/" -"matrices_and_transforms.html]Matrices and transforms[/url] tutorial.\n" -"[b]Note:[/b] Godot uses a [url=https://en.wikipedia.org/wiki/Right-" -"hand_rule]right-handed coordinate system[/url], which is a common standard. " -"For directions, the convention for built-in types like [Camera3D] is for -Z " -"to point forward (+X is right, +Y is up, and +Z is back). Other objects may " -"use different direction conventions. For more information, see the " -"[url=$DOCS_URL/tutorials/assets_pipeline/importing_3d_scenes/" -"model_export_considerations.html#d-asset-direction-conventions]3D asset " -"direction conventions[/url] tutorial.\n" -"[b]Note:[/b] The basis matrices are exposed as [url=https://www.mindcontrol." -"org/~hplus/graphics/matrix-layout.html]column-major[/url] order, which is the " -"same as OpenGL. However, they are stored internally in row-major order, which " -"is the same as DirectX." -msgstr "" -"Is é an cineál [Bunús] ionsuite [Athraithe] ná 3×3 [url=https://en.wikipedia." -"org/wiki/Matrix_(mathematics)]maitrís[/url] a úsáidtear chun rothlú 3D, " -"scála, agus lomadh. Is minic a úsáidtear é laistigh de [Transform3D].\n" -"Tá A [Bunús] comhdhéanta ag veicteoirí 3 ais, gach ceann acu a léiríonn colún " -"den mhaitrís: [comhalta x], [comhalta y], agus [comhalta z]. Bíonn tionchar " -"ag fad gach ais ([method Vector3.length]) ar scála an bhunús, agus bíonn " -"tionchar ag treo na n-aiseanna go léir ar an uainíocht. De ghnáth, bíonn na " -"haiseanna seo ingearach lena chéile. Mar sin féin, nuair a rothlaíonn tú aon " -"ais ina n-aonar, déantar an bonn a lomadh. Má chuirtear bonn lomtha i " -"bhfeidhm ar mhúnla 3D, beidh cuma saobhadh ar an tsamhail.\n" -"Tá [b]orthógónach[/b] ar A [bonn] má tá a haiseanna ingearach lena chéile. " -"Déantar bonn a [b]normalú[/b] más é [code]1[/code] fad gach aise. Tá bonn " -"[b]éide[/b] má tá an fad céanna ag gach ais (féach [method get_scale]). Tá " -"bunús [b]orthormónach[/b] má tá sé orthogonal agus normalaithe, rud a fhágann " -"nach féidir leis ach uainíochtaí a léiriú. Tá bunús [b]comhfhoirmiúil[/b] má " -"tá sé orthogonal agus aonfhoirmeach, rud a chinntíonn nach ndéantar é a " -"shaobhadh.\n" -"Le haghaidh réamhrá ginearálta, féach ar an [url=$DOCS_URL/tutorials/math/" -"matrices_and_transforms.html]Matrices and transforms[/url] teagaisc.\n" -"[b]Nóta:[/b] Úsáideann Godot [url=https://en.wikipedia.org/wiki/Right-" -"hand_rule]córas comhordanáidí ar dheis[/url], ar comhchaighdeán é. Maidir le " -"treoracha, is é an gnás do chineálacha ionsuite ar nós [Camera3D] ná -Z a " -"chur in iúl (tá + X ceart, tá +Y in airde, agus tá + Z ar ais). D’fhéadfadh " -"go n-úsáidfeadh rudaí eile gnásanna treo difriúla. Le haghaidh tuilleadh " -"faisnéise, féach ar an [url=$DOCS_URL/tutorials/assets_pipeline/" -"importing_3d_scenes/model_export_considerations.html#d-asset-direction-" -"conventions]coinbhinsiúin treo shócmhainne 3D[/url] teagaisc.\n" -"[b]Nóta:[/b] Tá na bonnmhaitrísí nochta mar [url=https://www.mindcontrol.org/" -"~hplus/graphics/matrix-layout.html]column-major[/url] ordú, is é sin mar an " -"gcéanna le OpenGL. Stóráiltear go hinmheánach iad, áfach, in ord mór rónna, " -"atá mar an gcéanna le DirectX." - msgid "Matrices and transforms" msgstr "Maitrísí agus transforms" @@ -21654,9 +18210,6 @@ msgstr "Maitrís Transform Demo" msgid "2.5D Game Demo" msgstr "Taispeántas Cluiche 2.5D" -msgid "Constructs a [Basis] identical to the [constant IDENTITY]." -msgstr "Tógann sé [Bunús] atá comhionann leis an [aitheantas seasta]." - msgid "Constructs a [Basis] as a copy of the given [Basis]." msgstr "Tógann [Bunús] mar chóip den [Bunús] tugtha." @@ -21691,240 +18244,6 @@ msgid "" msgstr "" "Tógann [Bunús] ó veicteoirí 3 ais. Is iad seo na colúin den bhun-mhitrís." -msgid "" -"Returns the [url=https://en.wikipedia.org/wiki/Determinant]determinant[/url] " -"of this basis's matrix. For advanced math, this number can be used to " -"determine a few attributes:\n" -"- If the determinant is exactly [code]0[/code], the basis is not invertible " -"(see [method inverse]).\n" -"- If the determinant is a negative number, the basis represents a negative " -"scale.\n" -"[b]Note:[/b] If the basis's scale is the same for every axis, its determinant " -"is always that scale by the power of 2." -msgstr "" -"Seoltar ar ais an [url=https://en.wikipedia.org/wiki/Determinant]determinant[/" -"url] de mhaitrís an bhunúis seo. Maidir le matamaitic ardleibhéil, is féidir " -"an uimhir seo a úsáid chun roinnt tréithe a chinneadh:\n" -"- Más é [code]0[/code] go díreach an cinntitheach, níl an bonn inbhéartach " -"(féach [method inbhéartach]).\n" -"- Más uimhir dhiúltach an chinntitheach, seasann an bonn do scála diúltach.\n" -"[b]Nóta:[/b] Más mar a chéile scála an bhonn do gach ais, is é an scála sin " -"faoi chumhacht 2 a chinntitheach i gcónaí." - -msgid "" -"Constructs a new [Basis] that only represents rotation from the given " -"[Vector3] of [url=https://en.wikipedia.org/wiki/Euler_angles]Euler angles[/" -"url], in radians.\n" -"- The [member Vector3.x] should contain the angle around the [member x] axis " -"(pitch).\n" -"- The [member Vector3.y] should contain the angle around the [member y] axis " -"(yaw).\n" -"- The [member Vector3.z] should contain the angle around the [member z] axis " -"(roll).\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Creates a Basis whose z axis points down.\n" -"var my_basis = Basis.from_euler(Vector3(TAU / 4, 0, 0))\n" -"\n" -"print(my_basis.z) # Prints (0, -1, 0).\n" -"[/gdscript]\n" -"[csharp]\n" -"// Creates a Basis whose z axis points down.\n" -"var myBasis = Basis.FromEuler(new Vector3(Mathf.Tau / 4.0f, 0.0f, 0.0f));\n" -"\n" -"GD.Print(myBasis.Z); // Prints (0, -1, 0).\n" -"[/csharp]\n" -"[/codeblocks]\n" -"The order of each consecutive rotation can be changed with [param order] (see " -"[enum EulerOrder] constants). By default, the YXZ convention is used " -"([constant EULER_ORDER_YXZ]): the basis rotates first around the Y axis " -"(yaw), then X (pitch), and lastly Z (roll). When using the opposite method " -"[method get_euler], this order is reversed." -msgstr "" -"Tógann sé [Bunús] nua nach seasann ach le rothlú ón [Vector3] tugtha de " -"[url=https://en.wikipedia.org/wiki/Euler_angles]uillinneacha Euler[/url], ina " -"raidian.\n" -"- Ba chóir go mbeadh an uillinn thart ar an ais [comhalta x] (páirc) san " -"[ball Vector3.x].\n" -"- Ba cheart go mbeadh an uillinn thart ar an ais [ball y] (yaw) sa [comhalta " -"Vector3.y].\n" -"- Ba chóir go mbeadh an uillinn timpeall an ais [member z] (roll) sa [ball " -"Vector3.z].\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Cruthaíonn sé Bunús a dtagann z síos air.\n" -"var my_basis = Bunús.from_euler(Vector3(TAU / 4, 0, 0))\n" -"\n" -"print(my_basis.z) # Priontaí (0, -1, 0).\n" -"[/gdscript]\n" -"[csharp]\n" -"// Cruthaíonn sé Bunús a dtagann a z síos.\n" -"var myBasis = Bunús.FromEuler(Vector3 nua(Mathf.Tau / 4.0f, 0.0f, 0.0f));\n" -"\n" -"GD.Print(myBasis.Z); // Priontaí (0, -1, 0).\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Is féidir ord gach rothlaithe comhleanúnach a athrú le tairisigh [ord param] " -"(féach [enum EulerOrder]). De réir réamhshocraithe, úsáidtear an coinbhinsiún " -"YXZ ([EULER_ORDER_YXZ]): rothlaíonn an bonn ar dtús timpeall an ais Y (yaw), " -"ansin X (pitch), agus ar deireadh Z (roll). Nuair a úsáidtear an modh eile " -"[method get_euler], déantar an t-ordú seo a aisiompú." - -msgid "" -"Constructs a new [Basis] that only represents scale, with no rotation or " -"shear, from the given [param scale] vector.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Basis.from_scale(Vector3(2, 4, 8))\n" -"\n" -"print(my_basis.x) # Prints (2, 0, 0).\n" -"print(my_basis.y) # Prints (0, 4, 0).\n" -"print(my_basis.z) # Prints (0, 0, 8).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Basis.FromScale(new Vector3(2.0f, 4.0f, 8.0f));\n" -"\n" -"GD.Print(myBasis.X); // Prints (2, 0, 0).\n" -"GD.Print(myBasis.Y); // Prints (0, 4, 0).\n" -"GD.Print(myBasis.Z); // Prints (0, 0, 8).\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] In linear algebra, the matrix of this basis is also known as a " -"[url=https://en.wikipedia.org/wiki/Diagonal_matrix]diagonal matrix[/url]." -msgstr "" -"Tógann sé [Bunús] nua nach léiríonn ach scála, gan rothlú ná lomadh, ón " -"veicteoir [para scála] a thugtar.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Bunús.from_scale(Vector3(2, 4, 8))\n" -"\n" -"print(my_basis.x) # Priontaí (2, 0, 0).\n" -"print(my_basis.y) # Priontála (0, 4, 0).\n" -"print(my_basis.z) # Priontála (0, 0, 8).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Basis.FromScale(Vector3(2.0f, 4.0f, 8.0f) nua);\n" -"\n" -"GD.Print(myBasis.X); // Priontaí (2, 0, 0).\n" -"GD.Print(myBasis.Y); // Priontaí (0, 4, 0).\n" -"GD.Print(myBasis.Z); // Priontaí (0, 0, 8).\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] San ailgéabar líneach, tugtar [url=https://en.wikipedia.org/wiki/" -"Diagonal_matrix]maitrís trasnánach[/url] ar mhaitrís an bhunúis seo freisin." - -msgid "" -"Returns this basis's rotation as a [Vector3] of [url=https://en.wikipedia.org/" -"wiki/Euler_angles]Euler angles[/url], in radians.\n" -"- The [member Vector3.x] contains the angle around the [member x] axis " -"(pitch);\n" -"- The [member Vector3.y] contains the angle around the [member y] axis " -"(yaw);\n" -"- The [member Vector3.z] contains the angle around the [member z] axis " -"(roll).\n" -"The order of each consecutive rotation can be changed with [param order] (see " -"[enum EulerOrder] constants). By default, the YXZ convention is used " -"([constant EULER_ORDER_YXZ]): Z (roll) is calculated first, then X (pitch), " -"and lastly Y (yaw). When using the opposite method [method from_euler], this " -"order is reversed.\n" -"[b]Note:[/b] Euler angles are much more intuitive but are not suitable for 3D " -"math. Because of this, consider using the [method get_rotation_quaternion] " -"method instead, which returns a [Quaternion].\n" -"[b]Note:[/b] In the Inspector dock, a basis's rotation is often displayed in " -"Euler angles (in degrees), as is the case with the [member Node3D.rotation] " -"property." -msgstr "" -"Filleann sé rothlú an bhonn seo mar [Vector3] de [url=https://en.wikipedia." -"org/wiki/Euler_angles]uillinneacha Euler[/url], i raidian.\n" -"- Tá an uillinn thart ar an ais [comhalta x] (páirc) sa [ball Vector3.x];\n" -"- Tá an uillinn timpeall na haise [member y] (yaw) sa [member Vector3.y];\n" -"- Tá an uillinn timpeall na haise [member z] (roll) sa [ball Vector3.z].\n" -"Is féidir ord gach rothlaithe comhleanúnach a athrú le tairisigh [ord param] " -"(féach [enum EulerOrder]). De réir réamhshocraithe, úsáidtear coinbhinsiún " -"YXZ ([EULER_ORDER_YXZ]): déantar Z (rolla) a ríomh ar dtús, ansin X (pitch), " -"agus ar deireadh Y (yaw). Nuair a úsáidtear an modh eile [method from_euler], " -"déantar an t-ordú seo a aisiompú.\n" -"[b]Nóta:[/b] Tá uillinneacha Euler i bhfad níos iomasach ach níl siad " -"oiriúnach don mhatamaitic 3D. Mar gheall air seo, smaoinigh ar an modh " -"[method get_rotation_quaternion] a úsáid ina ionad sin, a thugann " -"[Quaternion] ar ais.\n" -"[b]Nóta:[/b] Sa duga Cigire, is minic a léirítear rothlú bonn in uillinneacha " -"Euler (i gcéimeanna), mar a bhíonn i gcás an airí [member Node3D.rotation]." - -msgid "" -"Returns this basis's rotation as a [Quaternion].\n" -"[b]Note:[/b] Quatenions are much more suitable for 3D math but are less " -"intuitive. For user interfaces, consider using the [method get_euler] method, " -"which returns Euler angles." -msgstr "" -"Filleann sé rothlú an bhonn seo mar [Ceathrún].\n" -"[b]Nóta:[/b] Tá ceathracha i bhfad níos oiriúnaí do mhatamaitic 3D ach níl " -"siad chomh iomasach. Maidir le comhéadain úsáideora, smaoinigh ar an modh " -"[method get_euler] a úsáid, a thugann uillinneacha Euler ar ais." - -msgid "" -"Returns the length of each axis of this basis, as a [Vector3]. If the basis " -"is not sheared, this is the scaling factor. It is not affected by rotation.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Basis(\n" -" Vector3(2, 0, 0),\n" -" Vector3(0, 4, 0),\n" -" Vector3(0, 0, 8)\n" -")\n" -"# Rotating the Basis in any way preserves its scale.\n" -"my_basis = my_basis.rotated(Vector3.UP, TAU / 2)\n" -"my_basis = my_basis.rotated(Vector3.RIGHT, TAU / 4)\n" -"\n" -"print(my_basis.get_scale()) # Prints (2, 4, 8).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = new Basis(\n" -" Vector3(2.0f, 0.0f, 0.0f),\n" -" Vector3(0.0f, 4.0f, 0.0f),\n" -" Vector3(0.0f, 0.0f, 8.0f)\n" -");\n" -"// Rotating the Basis in any way preserves its scale.\n" -"myBasis = myBasis.Rotated(Vector3.Up, Mathf.Tau / 2.0f);\n" -"myBasis = myBasis.Rotated(Vector3.Right, Mathf.Tau / 4.0f);\n" -"\n" -"GD.Print(myBasis.Scale); // Prints (2, 4, 8).\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Note:[/b] If the value returned by [method determinant] is negative, the " -"scale is also negative." -msgstr "" -"Filleann sé fad gach ais den bhunús seo, mar [Veicteoir3]. Mura ndéantar an " -"bunús a lomadh, is é seo an fachtóir scálaithe. Níl tionchar ag rothlú air.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Bunús(\n" -" Veicteoir 3(2, 0, 0),\n" -" Veicteoir 3(0, 4, 0),\n" -" Veicteoir 3(0, 0, 8)\n" -")\n" -"# Tríd an mBonn a rothlú ar aon bhealach caomhnaítear a scála.\n" -"my_basis = my_basis.rotated(Vector3.UP, TAU / 2)\n" -"my_basis = my_basis.rotated(Vector3.RIGHT, TAU / 4)\n" -"\n" -"print(my_basis.get_scale()) # Priontála (2, 4, 8).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Bunús nua(\n" -" Veicteoir 3(2.0f, 0.0f, 0.0f),\n" -" Veicteoir 3(0.0f, 4.0f, 0.0f),\n" -" Veicteoir 3(0.0f, 0.0f, 8.0f)\n" -");\n" -"// Má rothlaíonn an Bunús ar aon bhealach caomhnaítear a scála.\n" -"myBasis = myBasis.Rotated(Vector3.Up, Mathf.Tau / 2.0f);\n" -"myBasis = myBasis.Rotated(Vector3.Right, Mathf.Tau / 4.0f);\n" -"\n" -"GD.Print(myBasis.Scála); // Priontaí (2, 4, 8).\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Nóta:[/b] Má tá an luach tugtha ar ais ag [cinnteoir modha] diúltach, tá " -"an scála diúltach freisin." - msgid "" "Returns the [url=https://en.wikipedia.org/wiki/Invertible_matrix]inverse of " "this basis's matrix[/url]." @@ -21959,243 +18278,6 @@ msgstr "" "Filleann sé [code]true[/code] má tá an bonn seo críochta, trí ghlaoch a chur " "ar [method @GlobalScope.is_finite] ar gach comhpháirt veicteora." -msgid "" -"Creates a new [Basis] with a rotation such that the forward axis (-Z) points " -"towards the [param target] position.\n" -"By default, the -Z axis (camera forward) is treated as forward (implies +X is " -"right). If [param use_model_front] is [code]true[/code], the +Z axis (asset " -"front) is treated as forward (implies +X is left) and points toward the " -"[param target] position.\n" -"The up axis (+Y) points as close to the [param up] vector as possible while " -"staying perpendicular to the forward axis. The returned basis is " -"orthonormalized (see [method orthonormalized]). The [param target] and [param " -"up] vectors cannot be [constant Vector3.ZERO], and cannot be parallel to each " -"other." -msgstr "" -"Cruthaíonn sé [Bunús] nua le rothlú sa chaoi is go díríonn an ais chun " -"tosaigh (-Z) i dtreo an t-ionad [param sprice].\n" -"De réir réamhshocraithe, caitear leis an ais -Z (ceamara ar aghaidh) mar ais " -"ar aghaidh (le tuiscint go bhfuil + X ceart). Má tá [param use_model_front] " -"[code]true[/code], caitear leis an ais +Z (tosach sócmhainne) mar chun " -"tosaigh (tugann sé le tuiscint go bhfuil + X fágtha) agus dírítear i dtreo an " -"tseasaimh [param target].\n" -"Pointí an ais suas (+Y) chomh gar agus is féidir don veicteoir [param suas] " -"agus ag fanacht ingearach leis an ais chun tosaigh. Tá an bunús ar ais " -"orthonormalized (féach [method orthonormalized]). Ní féidir leis na " -"veicteoirí [param target] agus [param up] a bheith [Vector3.ZERO seasmhach], " -"agus ní féidir leo a bheith comhthreomhar lena chéile." - -msgid "" -"Returns the orthonormalized version of this basis. An orthonormal basis is " -"both [i]orthogonal[/i] (the axes are perpendicular to each other) and " -"[i]normalized[/i] (the axes have a length of [code]1[/code]), which also " -"means it can only represent rotation.\n" -"It is often useful to call this method to avoid rounding errors on a rotating " -"basis:\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Rotate this Node3D every frame.\n" -"func _process(delta):\n" -" basis = basis.rotated(Vector3.UP, TAU * delta)\n" -" basis = basis.rotated(Vector3.RIGHT, TAU * delta)\n" -"\n" -" basis = basis.orthonormalized()\n" -"[/gdscript]\n" -"[csharp]\n" -"// Rotate this Node3D every frame.\n" -"public override void _Process(double delta)\n" -"{\n" -" Basis = Basis.Rotated(Vector3.Up, Mathf.Tau * (float)delta)\n" -" .Rotated(Vector3.Right, Mathf.Tau * (float)delta)\n" -" .Orthonormalized();\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Tuairisceáin an leagan orthonormalized den bhunús seo. Bunús ortanormal is ea " -"[i]orthogónach[/i] (tá na haiseanna ingearach lena chéile) agus " -"[i]normalaithe[/i] (tá fad [code]1[/code] ag na haiseanna), atá freisin " -"ciallaíonn sé nach féidir leis ach uainíocht a léiriú.\n" -"Is minic a bhíonn sé úsáideach an modh seo a ghlaoch chun earráidí slánaithe " -"a sheachaint ar bhonn rothlach:\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Rothlaigh an Node3D seo gach fráma.\n" -"feidhm _process(deil):\n" -" bonn = bonn.rothlaithe(Vector3.UP, TAU * deilt)\n" -" bonn = bonn.rothlaithe(Vector3.RIGHT, TAU * deilt)\n" -"\n" -" bonn = bonn.ortanormalaithe()\n" -"[/gdscript]\n" -"[csharp]\n" -"// Rothlaigh an Node3D seo gach fráma.\n" -"sáraíonn poiblí folús _Process(deilta dúbailte)\n" -"{\n" -" Bunús = Basis.Rotated(Vector3.Up, Mathf.Tau * (snámh) deilt)\n" -" .Rotated(Vector3.Right, Mathf.Tau * (snámh) deilt)\n" -" . Ortanormalaithe();\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Returns this basis rotated around the given [param axis] by [param angle] (in " -"radians). The [param axis] must be a normalized vector (see [method Vector3." -"normalized]).\n" -"Positive values rotate this basis clockwise around the axis, while negative " -"values rotate it counterclockwise.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Basis.IDENTITY\n" -"var angle = TAU / 2\n" -"\n" -"my_basis = my_basis.rotated(Vector3.UP, angle) # Rotate around the up axis " -"(yaw).\n" -"my_basis = my_basis.rotated(Vector3.RIGHT, angle) # Rotate around the right " -"axis (pitch).\n" -"my_basis = my_basis.rotated(Vector3.BACK, angle) # Rotate around the back " -"axis (roll).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Basis.Identity;\n" -"var angle = Mathf.Tau / 2.0f;\n" -"\n" -"myBasis = myBasis.Rotated(Vector3.Up, angle); // Rotate around the up axis " -"(yaw).\n" -"myBasis = myBasis.Rotated(Vector3.Right, angle); // Rotate around the right " -"axis (pitch).\n" -"myBasis = myBasis.Rotated(Vector3.Back, angle); // Rotate around the back " -"axis (roll).\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Filleann sé seo bonn rothlaithe thart ar an [param-ais] tugtha ag [param " -"uillinn] (i raidian). Caithfidh an [ais param] a bheith ina veicteoir " -"normalaithe (féach [method Vector3.normalized]).\n" -"Rothlaíonn luachanna dearfacha an bonn seo deiseal timpeall na haise, agus " -"rothlaíonn luachanna diúltacha í go tuathalach.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Bunús.IDENTITY\n" -"uillinn var = TAU/2\n" -"\n" -"my_basis = my_basis.rotated(Vector3.UP, uillinn) # Rothlaigh thart ar an ais " -"suas (yaw).\n" -"my_basis = my_basis.rotated(Vector3.RIGHT, uillinn) # Rothlaigh thart ar an " -"ais dheis (pitch).\n" -"my_basis = my_basis.rotated(Vector3.BACK, uillinn) # Rothlaigh thart ar an " -"ais cúil (rolla).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Bunús.Identity;\n" -"uillinn var = Mathf.Tau / 2.0f;\n" -"\n" -"myBasis = myBasis.Rotated(Vector3.Up, uillinn); // Rothlaigh thart ar an " -"ais suas (yaw).\n" -"myBasis = myBasis.Rotated(Vector3.Right, uillinn); // Rothlaigh thart ar an " -"ais dheis (pitch).\n" -"myBasis = myBasis.Rotated(Vector3.Back, uillinn); // Rothlaigh timpeall an " -"ais chúl (roll).\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Returns this basis with each axis's components scaled by the given [param " -"scale]'s components.\n" -"The basis matrix's rows are multiplied by [param scale]'s components. This " -"operation is a global scale (relative to the parent).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Basis(\n" -" Vector3(1, 1, 1),\n" -" Vector3(2, 2, 2),\n" -" Vector3(3, 3, 3)\n" -")\n" -"my_basis = my_basis.scaled(Vector3(0, 2, -2))\n" -"\n" -"print(my_basis.x) # Prints (0, 2, -2).\n" -"print(my_basis.y) # Prints (0, 4, -4).\n" -"print(my_basis.z) # Prints (0, 6, -6).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = new Basis(\n" -" new Vector3(1.0f, 1.0f, 1.0f),\n" -" new Vector3(2.0f, 2.0f, 2.0f),\n" -" new Vector3(3.0f, 3.0f, 3.0f)\n" -");\n" -"myBasis = myBasis.Scaled(new Vector3(0.0f, 2.0f, -2.0f));\n" -"\n" -"GD.Print(myBasis.X); // Prints (0, 2, -2).\n" -"GD.Print(myBasis.Y); // Prints (0, 4, -4).\n" -"GD.Print(myBasis.Z); // Prints (0, 6, -6).\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Filleann sé an bonn seo le comhpháirteanna gach ais de réir scála na " -"gcomhpháirteanna atá tugtha [scála param].\n" -"Iolraítear sraitheanna na bonn-maitrís faoi chomhpháirteanna [scála param]. " -"Is scála domhanda í an oibríocht seo (i gcoibhneas leis an tuismitheoir).\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Bunús(\n" -" Veicteoir 3(1, 1, 1),\n" -" Veicteoir 3(2, 2, 2),\n" -" Veicteoir 3(3, 3, 3)\n" -")\n" -"my_basis = my_basis.scaled(Vector3(0, 2, -2))\n" -"\n" -"print(my_basis.x) # Priontaí (0, 2, -2).\n" -"print(my_basis.y) # Priontaí (0, 4, -4).\n" -"print(my_basis.z) # Priontaí (0, 6, -6).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Bunús nua(\n" -" Veicteoir nua3(1.0f, 1.0f, 1.0f),\n" -" Veicteoir nua3(2.0f, 2.0f, 2.0f),\n" -" Veicteoir nua3(3.0f, 3.0f, 3.0f)\n" -");\n" -"myBasis = myBasis.Scaled(Vector3(0.0f, 2.0f, -2.0f));\n" -"\n" -"GD.Print(myBasis.X); // Priontaí (0, 2, -2).\n" -"GD.Print(myBasis.Y); // Priontaí (0, 4, -4).\n" -"GD.Print(myBasis.Z); // Priontaí (0, 6, -6).\n" -"[/csharp]\n" -"[/codeblocks]" - -msgid "" -"Performs a spherical-linear interpolation with the [param to] basis, given a " -"[param weight]. Both this basis and [param to] should represent a rotation.\n" -"[b]Example:[/b] Smoothly rotate a [Node3D] to the target basis over time, " -"with a [Tween].\n" -"[codeblock]\n" -"var start_basis = Basis.IDENTITY\n" -"var target_basis = Basis.IDENTITY.rotated(Vector3.UP, TAU / 2)\n" -"\n" -"func _ready():\n" -" create_tween().tween_method(interpolate, 0.0, 1.0, 5.0).set_trans(Tween." -"TRANS_EXPO)\n" -"\n" -"func interpolate(weight):\n" -" basis = start_basis.slerp(target_basis, weight)\n" -"[/codeblock]" -msgstr "" -"Déanann sé idirshuíomh sféarúil-líneach leis an mbonn [param go], nuair a " -"thugtar [meáchan param]. Ba cheart go léireodh an bonn seo agus [para go] " -"uainíocht.\n" -"[b]Sampla:[/b] Rothlaigh [Node3D] go réidh go dtí an bonn sprice le himeacht " -"ama, le [Tween].\n" -"[codeblock]\n" -"var start_basis = Bunús.IDENTITY\n" -"var target_basis = Basis.IDENTITY.rotated(Vector3.UP, TAU / 2)\n" -"\n" -"func _réidh():\n" -" create_tween().tween_modh(idirshuí, 0.0, 1.0, 5.0).set_trans(Tween." -"TRANS_EXPO)\n" -"\n" -"idirshuíomh (meáchan):\n" -" bunús = start_basis.slerp(sprioc_basis, meáchan)\n" -"[/codeblock]" - msgid "" "Returns the transposed dot product between [param with] and the [member x] " "axis (see [method transposed]).\n" @@ -22223,65 +18305,6 @@ msgstr "" "(féach [method trasuite]).\n" "Tá sé seo comhionann le [code]bas.z.dot(veicteoir)[/code]." -msgid "" -"Returns the transposed version of this basis. This turns the basis matrix's " -"columns into rows, and its rows into columns.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Basis(\n" -" Vector3(1, 2, 3),\n" -" Vector3(4, 5, 6),\n" -" Vector3(7, 8, 9)\n" -")\n" -"my_basis = my_basis.transposed()\n" -"\n" -"print(my_basis.x) # Prints (1, 4, 7).\n" -"print(my_basis.y) # Prints (2, 5, 8).\n" -"print(my_basis.z) # Prints (3, 6, 9).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = new Basis(\n" -" new Vector3(1.0f, 2.0f, 3.0f),\n" -" new Vector3(4.0f, 5.0f, 6.0f),\n" -" new Vector3(7.0f, 8.0f, 9.0f)\n" -");\n" -"myBasis = myBasis.Transposed();\n" -"\n" -"GD.Print(myBasis.X); // Prints (1, 4, 7).\n" -"GD.Print(myBasis.Y); // Prints (2, 5, 8).\n" -"GD.Print(myBasis.Z); // Prints (3, 6, 9).\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Tugann sé ar ais an leagan trassuite den bhunús seo. Déanann sé seo colúin na " -"bun-maitrís ina sraitheanna, agus a sraitheanna ina gcolúin.\n" -"[codeblocks]\n" -"[gdscript]\n" -"var my_basis = Bunús(\n" -" Veicteoir 3(1, 2, 3),\n" -" Veicteoir 3(4, 5, 6),\n" -" Veicteoir 3(7, 8, 9)\n" -")\n" -"my_basis = my_basis.transposed()\n" -"\n" -"print(my_basis.x) # Priontaí (1, 4, 7).\n" -"print(my_basis.y) # Priontaí (2, 5, 8).\n" -"print(my_basis.z) # Priontaí (3, 6, 9).\n" -"[/gdscript]\n" -"[csharp]\n" -"var myBasis = Bunús nua(\n" -" Veicteoir nua3(1.0f, 2.0f, 3.0f),\n" -" Veicteoir nua3(4.0f, 5.0f, 6.0f),\n" -" Veicteoir nua3(7.0f, 8.0f, 9.0f)\n" -");\n" -"myBasis = myBasis.Transposed();\n" -"\n" -"GD.Print(myBasis.X); // Priontaí (1, 4, 7).\n" -"GD.Print(myBasis.Y); // Priontaí (2, 5, 8).\n" -"GD.Print(myBasis.Z); // Priontaí (3, 6, 9).\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "The basis's X axis, and the column [code]0[/code] of the matrix.\n" "On the identity basis, this vector points right ([constant Vector3.RIGHT])." @@ -22306,49 +18329,6 @@ msgstr "" "Ar bhonn aitheantais, díríonn an veicteoir seo siar ([Vector3.BACK " "tairiseach])." -msgid "" -"The identity basis. This is a basis with no rotation, no shear, and its scale " -"being [code]1[/code]. This means that:\n" -"- The [member x] points right ([constant Vector3.RIGHT]);\n" -"- The [member y] points up ([constant Vector3.UP]);\n" -"- The [member z] points back ([constant Vector3.BACK]).\n" -"[codeblock]\n" -"var basis := Basis.IDENTITY\n" -"print(\"| X | Y | Z\")\n" -"print(\"| %s | %s | %s\" % [basis.x.x, basis.y.x, basis.z.x])\n" -"print(\"| %s | %s | %s\" % [basis.x.y, basis.y.y, basis.z.y])\n" -"print(\"| %s | %s | %s\" % [basis.x.z, basis.y.z, basis.z.z])\n" -"# Prints:\n" -"# | X | Y | Z\n" -"# | 1 | 0 | 0\n" -"# | 0 | 1 | 0\n" -"# | 0 | 0 | 1\n" -"[/codeblock]\n" -"This is identical to creating [constructor Basis] without any parameters. " -"This constant can be used to make your code clearer, and for consistency with " -"C#." -msgstr "" -"An bunús céannachta. Is bonn é seo gan aon rothlú, gan lomadh, agus is é " -"[code]1[/code] a scála. Ciallaíonn sé seo go:\n" -"- Tá na pointí [comhalta x] ar dheis ([Vector3.RIGHT tairiseach]);\n" -"- Léiríonn [comhalta y] pointe ([Vector3.UP leanúnach]);\n" -"- Díríonn an [comhalta z] siar ([Vector3.BACK] tairiseach).\n" -"[codeblock]\n" -"var bhonn := Bunús.IDENTITY\n" -"cló (\"| X | Y | Z\")\n" -"print(\"| %s | %s | %s\" %[base.x.x, basis.y.x, basis.z.x])\n" -"print(\"| %s | %s | %s\" %[base.x.y, basis.y.y, basis.z.y])\n" -"print(\"| %s | %s | %s\" %[base.x.z, basis.y.z, basis.z.z])\n" -"# Priontála:\n" -"# | X | Y | Z\n" -"# | 1 | 0 | 0\n" -"# | 0 | 1 | 0\n" -"# | 0 | 0 | 1\n" -"[/codeblock]\n" -"Tá sé seo comhionann le [Bunús Tógálaí] a chruthú gan aon pharaiméadair. Is " -"féidir an tairiseach seo a úsáid chun do chód a dhéanamh níos soiléire, agus " -"chun comhsheasmhacht le C#." - msgid "" "When any basis is multiplied by [constant FLIP_X], it negates all components " "of the [member x] axis (the X column).\n" @@ -22400,40 +18380,6 @@ msgstr "" "Trasfhoirmítear (iolraíonn) an bunús [param right] leis an mbonn seo.\n" "Seo an oibríocht a dhéantar idir tuismitheoir agus leanbh [Node3D]s." -msgid "" -"Transforms (multiplies) the [param right] vector by this basis, returning a " -"[Vector3].\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Basis that swaps the X/Z axes and doubles the scale.\n" -"var my_basis = Basis(Vector3(0, 2, 0), Vector3(2, 0, 0), Vector3(0, 0, 2))\n" -"print(my_basis * Vector3(1, 2, 3)) # Prints (4, 2, 6)\n" -"[/gdscript]\n" -"[csharp]\n" -"// Basis that swaps the X/Z axes and doubles the scale.\n" -"var myBasis = new Basis(new Vector3(0, 2, 0), new Vector3(2, 0, 0), new " -"Vector3(0, 0, 2));\n" -"GD.Print(myBasis * new Vector3(1, 2, 3)); // Prints (4, 2, 6)\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Trasfhoirmítear (iolrú) an veicteoir [param ar dheis] ar an mbonn seo, ag " -"filleadh [Veicteoir3].\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Bunús a mhalartaíonn na haiseanna X/Z agus a dhúblaíonn an scála.\n" -"var my_basis = Bunús(Veicteoir3(0, 2, 0), Veicteoir3(2, 0, 0), Veicteoir3(0, " -"0, 2))\n" -"print(my_basis * Veicteoir 3(1, 2, 3)) # Priontaí (4, 2, 6)\n" -"[/gdscript]\n" -"[csharp]\n" -"// Bunús a mhalartaíonn na haiseanna X/Z agus a dhúblaíonn an scála.\n" -"var myBasis = Bunús nua(Veicteoir nua3(0, 2, 0), Veicteoir nua3(2, 0, 0), " -"Veicteoir nua3(0, 0, 2));\n" -"GD.Print(myBasis * Veicteoir nua3(1, 2, 3)); // Priontaí (4, 2, 6)\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Multiplies all components of the [Basis] by the given [float]. This affects " "the basis's scale uniformly, resizing all 3 axes by the [param right] value." @@ -23177,80 +19123,6 @@ msgstr "Taispeántas Carachtair Cinematic 3D" msgid "A themed button that can contain text and an icon." msgstr "Cnaipe téamaí ar féidir téacs agus deilbhín a chuimsiú." -msgid "" -"[Button] is the standard themed button. It can contain text and an icon, and " -"it will display them according to the current [Theme].\n" -"[b]Example of creating a button and assigning an action when pressed by code:" -"[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _ready():\n" -" var button = Button.new()\n" -" button.text = \"Click me\"\n" -" button.pressed.connect(self._button_pressed)\n" -" add_child(button)\n" -"\n" -"func _button_pressed():\n" -" print(\"Hello world!\")\n" -"[/gdscript]\n" -"[csharp]\n" -"public override void _Ready()\n" -"{\n" -" var button = new Button();\n" -" button.Text = \"Click me\";\n" -" button.Pressed += ButtonPressed;\n" -" AddChild(button);\n" -"}\n" -"\n" -"private void ButtonPressed()\n" -"{\n" -" GD.Print(\"Hello world!\");\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"See also [BaseButton] which contains common properties and methods associated " -"with this node.\n" -"[b]Note:[/b] Buttons do not interpret touch input and therefore don't support " -"multitouch, since mouse emulation can only press one button at a given time. " -"Use [TouchScreenButton] for buttons that trigger gameplay movement or actions." -msgstr "" -"Is é [Button] an cnaipe caighdeánach téamaí. Is féidir téacs agus deilbhín a " -"bheith ann, agus taispeánfaidh sé iad de réir an [Téama] reatha.\n" -"[b]Sampla de chnaipe a chruthú agus gníomh a shannadh nuair a bhrúitear é le " -"cód:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _réidh():\n" -" cnaipe var = Button.new()\n" -" button.text = \"Cliceáil orm\"\n" -" button.pressed.connect(féin._button_brúite)\n" -" add_child(cnaipe)\n" -"\n" -"feidhm _cnaipe_brúite():\n" -" print (\"Dia duit ar domhan!\")\n" -"[/gdscript]\n" -"[csharp]\n" -"poiblí a shárú ar neamhní _Ready()\n" -"{\n" -" cnaipe var = Cnaipe nua();\n" -" button.Text = \"Cliceáil orm\";\n" -" button.Pressed += ButtonPressed;\n" -" AddChild(cnaipe);\n" -"}\n" -"\n" -"folús príobháideach ButtonPressed()\n" -"{\n" -" GD.Print(\"Dia duit ar domhan!\");\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Féach freisin [BaseButton] ina bhfuil airíonna agus modhanna coitianta a " -"bhaineann leis an nód seo.\n" -"[b]Nóta:[/b] Ní léirmhíníonn cnaipí ionchur tadhaill agus mar sin ní " -"thacaíonn siad le multitouch, mar ní féidir le haithrisiú luiche ach cnaipe " -"amháin a bhrú ag am ar leith. Bain úsáid as [TouchScreenButton] le haghaidh " -"cnaipí a spreagann gluaiseacht nó gníomhartha cluicheplay." - msgid "Operating System Testing Demo" msgstr "Taispeántas Tástála Córas Oibriúcháin" @@ -23268,14 +19140,6 @@ msgstr "" "Má tá sé socraithe chuig rud éigin eile seachas [TextServer.AUTOWRAP_OFF " "leanúnach], filltear an téacs taobh istigh de dhronuilleog teorann an nód." -msgid "" -"When this property is enabled, text that is too large to fit the button is " -"clipped, when disabled the Button will always be wide enough to hold the text." -msgstr "" -"Nuair a bhíonn an t-airí seo cumasaithe, gearrtar téacs atá ró-mhór chun an " -"cnaipe a fheistiú, nuair a bheidh sé díchumasaithe beidh an Cnaipe leathan go " -"leor chun an téacs a choinneáil i gcónaí." - msgid "" "When enabled, the button's icon will expand/shrink to fit the button's size " "while keeping its aspect. See also [theme_item icon_max_width]." @@ -23571,154 +19435,6 @@ msgstr "Astaítear nuair a bhrúitear ceann de chnaipí an ghrúpa." msgid "A built-in type representing a method or a standalone function." msgstr "Cineál ionsuite a léiríonn modh nó feidhm neamhspleách." -msgid "" -"[Callable] is a built-in [Variant] type that represents a function. It can " -"either be a method within an [Object] instance, or a custom callable used for " -"different purposes (see [method is_custom]). Like all [Variant] types, it can " -"be stored in variables and passed to other functions. It is most commonly " -"used for signal callbacks.\n" -"[b]Example:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func print_args(arg1, arg2, arg3 = \"\"):\n" -" prints(arg1, arg2, arg3)\n" -"\n" -"func test():\n" -" var callable = Callable(self, \"print_args\")\n" -" callable.call(\"hello\", \"world\") # Prints \"hello world \".\n" -" callable.call(Vector2.UP, 42, callable) # Prints \"(0, -1) 42 Node(node." -"gd)::print_args\".\n" -" callable.call(\"invalid\") # Invalid call, should have at least 2 " -"arguments.\n" -"[/gdscript]\n" -"[csharp]\n" -"// Default parameter values are not supported.\n" -"public void PrintArgs(Variant arg1, Variant arg2, Variant arg3 = default)\n" -"{\n" -" GD.PrintS(arg1, arg2, arg3);\n" -"}\n" -"\n" -"public void Test()\n" -"{\n" -" // Invalid calls fail silently.\n" -" Callable callable = new Callable(this, MethodName.PrintArgs);\n" -" callable.Call(\"hello\", \"world\"); // Default parameter values are not " -"supported, should have 3 arguments.\n" -" callable.Call(Vector2.Up, 42, callable); // Prints \"(0, -1) 42 Node(Node." -"cs)::PrintArgs\".\n" -" callable.Call(\"invalid\"); // Invalid call, should have 3 arguments.\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"In GDScript, it's possible to create lambda functions within a method. Lambda " -"functions are custom callables that are not associated with an [Object] " -"instance. Optionally, lambda functions can also be named. The name will be " -"displayed in the debugger, or when calling [method get_method].\n" -"[codeblock]\n" -"func _init():\n" -" var my_lambda = func (message):\n" -" print(message)\n" -"\n" -" # Prints Hello everyone!\n" -" my_lambda.call(\"Hello everyone!\")\n" -"\n" -" # Prints \"Attack!\", when the button_pressed signal is emitted.\n" -" button_pressed.connect(func(): print(\"Attack!\"))\n" -"[/codeblock]\n" -"In GDScript, you can access methods and global functions as [Callable]s:\n" -"[codeblock]\n" -"tween.tween_callback(node.queue_free) # Object methods.\n" -"tween.tween_callback(array.clear) # Methods of built-in types.\n" -"tween.tween_callback(print.bind(\"Test\")) # Global functions.\n" -"[/codeblock]\n" -"[b]Note:[/b] [Dictionary] does not support the above due to ambiguity with " -"keys.\n" -"[codeblock]\n" -"var dictionary = {\"hello\": \"world\"}\n" -"\n" -"# This will not work, `clear` is treated as a key.\n" -"tween.tween_callback(dictionary.clear)\n" -"\n" -"# This will work.\n" -"tween.tween_callback(Callable.create(dictionary, \"clear\"))\n" -"[/codeblock]" -msgstr "" -"Is cineál ionsuite [Athróg] é [inghlaoite] a sheasann d’fheidhm. Féadfaidh sé " -"a bheith ina mhodh laistigh de chás [Réad], nó ina mhodh inghlaoite a " -"úsáidtear chun críocha éagsúla (féach [method is_custom]). Cosúil le gach " -"cineál [Athróg], is féidir é a stóráil in athróga agus a chur ar aghaidh " -"chuig feidhmeanna eile. Úsáidtear é go coitianta le haghaidh aisghlaonna " -"comhartha.\n" -"[b]Sampla:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func print_args(arg1, arg2, arg3 = \"\"):\n" -" priontaí(arg1, arg2, arg3)\n" -"\n" -"tástáil fheidhm():\n" -" var callable = Inghlaoite(féin, \"print_args\")\n" -" callable.call (\"hello\", \"world\") # Priontálann \"hello world\".\n" -" callable.call(Vector2.UP, 42, inghlaoite) # Priontála \"(0, -1) 42 " -"Nód(node.gd)::print_args\".\n" -" callable.call(\"neamhbhailí\") # Glao neamhbhailí, ba cheart go mbeadh 2 " -"argóint ar a laghad ann.\n" -"[/gdscript]\n" -"[csharp]\n" -"// Ní thacaítear le luachanna paraiméadar réamhshocraithe.\n" -"ar neamhní poiblí PrintArgs(Athraithe arg1, Variant arg2, Variant arg3 = " -"réamhshocraithe)\n" -"{\n" -" GD.PrintS(arg1, arg2, arg3);\n" -"}\n" -"\n" -"Tástáil ar neamhní poiblí()\n" -"{\n" -" // Teipeann glaonna neamhbhailí go ciúin.\n" -" Inghlaoite = Inghlaoite nua(seo, MethodName.PrintArgs);\n" -" callable.Call (\"hello\", \"domhan\"); // Ní thacaítear le luachanna " -"paraiméadar réamhshocraithe, ba cheart go mbeadh 3 argóint ann.\n" -" inghlaoite.Call(Vector2.Up, 42, inghlaoite); // Priontaí \"(0, -1) 42 " -"Nód(Node.cs)::PrintArgs\".\n" -" callable.Call (\"neamhbhailí\"); // Glao neamhbhailí, ba cheart go mbeadh " -"3 argóint ann.\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"I GDScript, is féidir feidhmeanna lambda a chruthú laistigh de mhodh. Is " -"feidhmeanna inghlaoite saincheaptha iad feidhmeanna Lambda nach mbaineann le " -"sampla [Réad]. Go roghnach, is féidir feidhmeanna lambda a ainmniú freisin. " -"Taispeánfar an t-ainm sa dífhabhtóir, nó nuair a ghlaonn tú ar [method " -"get_method].\n" -"[codeblock]\n" -"feidhm _init():\n" -" var my_lambda = func (teachtaireacht):\n" -" cló (teachtaireacht)\n" -"\n" -" # Priontaí Dia duit gach duine!\n" -" my_lambda.call(\"Dia duit gach duine!\")\n" -"\n" -" # Priontála \"Ionsaí!\", nuair a astaítear an comhartha button_brúite.\n" -" button_pressed.connect(func(): print(\"Ionsaí!\"))\n" -"[/codeblock]\n" -"In GDScript, is féidir leat modhanna agus feidhmeanna domhanda a rochtain mar " -"[Inghlaoite]s:\n" -"[codeblock]\n" -"tween.tween_callback(node.queue_free) # Modh oibiachta.\n" -"tween.tween_callback(array.clear) # Modhanna de chineálacha ionsuite.\n" -"tween.tween_callback(print.bind(\"Tástáil\")) # Feidhm dhomhanda.\n" -"[/codeblock]\n" -"[b]Nóta:[/b] Ní thacaíonn [Foclóir] leis an méid thuas mar gheall ar athbhrí " -"le heochracha.\n" -"[codeblock]\n" -"var foclóir = { \"hello\": \"domhan\" }\n" -"\n" -"# Ní oibreoidh sé seo, glactar le `soiléir` mar eochair.\n" -"tween.tween_callback(foclóir.soiléir)\n" -"\n" -"# Oibreoidh sé seo.\n" -"tween.tween_callback(Callable.create(foclóir, \"soiléir\"))\n" -"[/codeblock]" - msgid "Constructs an empty [Callable], with no object nor method bound." msgstr "Tógann sé [Inghlaoite] folamh, gan aon réad ná modh faoi cheangal." @@ -23860,25 +19576,6 @@ msgstr "" "agus go [i]gcuirtear leis[/i] an toradh aon argóintí nach bhfuil ceangailte " "le [method-ceangail] leis an toradh." -msgid "" -"Return the bound arguments (as long as [method get_bound_arguments_count] is " -"greater than zero), or empty (if [method get_bound_arguments_count] is less " -"than or equal to zero)." -msgstr "" -"Tabhair ar ais na hargóintí faoi cheangal (chomh fada agus go bhfuil [method " -"get_bound_arguments_count] níos mó ná nialas), nó folamh (má tá [method " -"get_bound_arguments_count] níos lú ná nó cothrom le nialas)." - -msgid "" -"Returns the total amount of arguments bound (or unbound) via successive " -"[method bind] or [method unbind] calls. If the amount of arguments unbound is " -"greater than the ones bound, this function returns a value less than zero." -msgstr "" -"Filleann sé méid iomlán na n-argóintí atá faoi cheangal (nó neamhcheangailte) " -"trí ghlaonna comhleanúnacha [method-cheangail] nó [dícheangail modh]. Más mó " -"líon na n-argóintí atá neamhcheangailte ná na cinn atá ceangailte, filleann " -"an fheidhm seo luach níos lú ná nialas." - msgid "" "Returns the name of the method represented by this [Callable]. If the " "callable is a GDScript lambda function, returns the function's name or " @@ -23932,13 +19629,6 @@ msgstr "" "- chun feidhmeanna domhanda, lambda, agus RPC a léiriú i GDScript;\n" "- chun críocha eile sa chroí-, Síneadh GDE, agus C#." -msgid "" -"Returns [code]true[/code] if this [Callable] has no target to call the method " -"on." -msgstr "" -"Filleann sé [code]true[/code] mura bhfuil aon sprioc ag an [Inghlaoite] seo " -"chun an modh a ghlaoch air." - msgid "" "Returns [code]true[/code] if this [Callable] is a standard callable. This " "method is the opposite of [method is_custom]. Returns [code]false[/code] if " @@ -24047,23 +19737,6 @@ msgstr "" "[CallbackTweener] a chruthú. Ní fheidhmeoidh aon [CallbackTweener] a " "chruthaítear de láimh i gceart." -msgid "" -"Makes the callback call delayed by given time in seconds.\n" -"[b]Example:[/b]\n" -"[codeblock]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_callback(queue_free).set_delay(2) #this will call queue_free() " -"after 2 seconds\n" -"[/codeblock]" -msgstr "" -"Cuirtear moill ar an nglao aisghlao de réir aga tugtha i soicindí.\n" -"[b]Sampla:[/b]\n" -"[codeblock]\n" -"var tween = get_tree().create_tween()\n" -"tween.tween_callback(queue_free).set_delay(2) #cuirfidh sé seo glaoch ar " -"queue_free() tar éis 2 shoicind\n" -"[/codeblock]" - msgid "Camera node for 2D scenes." msgstr "Nód ceamara le haghaidh radhairc 2D." @@ -25001,21 +20674,6 @@ msgstr "" "Iolraitheoir don mhéid risíochta. Bíonn íomhá níos gile mar thoradh ar luach " "níos airde." -msgid "" -"Sensitivity of camera sensors, measured in ISO. A higher sensitivity results " -"in a brighter image. Only available when [member ProjectSettings.rendering/" -"lights_and_shadows/use_physical_light_units] is enabled. When [member " -"auto_exposure_enabled] this can be used as a method of exposure compensation, " -"doubling the value will increase the exposure value (measured in EV100) by 1 " -"stop." -msgstr "" -"Íogaireacht braiteoirí ceamara, tomhaiste in ISO. Tá íomhá níos gile mar " -"thoradh ar íogaireacht níos airde. Ar fáil ach amháin nuair atá [comhalta " -"ProjectSettings.rendering/lights_and_shadows/use_physical_light_units] " -"cumasaithe. Nuair a [comhalta auto_exposure_enabled] is féidir é seo a úsáid " -"mar mhodh cúitimh nochta, méadóidh dúbailt an luach na risíochta (arna " -"thomhas in EV100) faoi 1 stad." - msgid "Physically-based camera settings." msgstr "Socruithe ceamara fisiciúil-bhunaithe." @@ -25079,19 +20737,6 @@ msgstr "" "teorainn leis an uath-nochtadh ó nochtadh faoi bhun gile áirithe, rud a " "fhágann go mbeidh pointe scoite ann ina bhfanfaidh an radharc geal." -msgid "" -"The minimum luminance luminance (in EV100) used when calculating auto " -"exposure. When calculating scene average luminance, color values will be " -"clamped to at least this value. This limits the auto-exposure from exposing " -"above a certain brightness, resulting in a cut off point where the scene will " -"remain dark." -msgstr "" -"An luminance íosta luminance (in EV100) a úsáidtear nuair a bhíonn nochtadh " -"uathoibríoch á ríomh. Nuair a bheidh meán-luminance radharc á ríomh, déanfar " -"luachanna datha a chlampáil go dtí an luach seo ar a laghad. Cuireann sé seo " -"teorainn leis an uath-nochtadh ó nochtadh os cionn gile áirithe, rud a " -"fhágann go mbeidh pointe scoite ann ina bhfanfaidh an radharc dorcha." - msgid "" "Size of the aperture of the camera, measured in f-stops. An f-stop is a " "unitless ratio between the focal length of the camera and the diameter of the " @@ -25314,23 +20959,6 @@ msgstr "" "Tugann fotha ceamara rochtain duit ar cheamara fisiceach amháin atá " "ceangailte de do ghléas." -msgid "" -"A camera feed gives you access to a single physical camera attached to your " -"device. When enabled, Godot will start capturing frames from the camera which " -"can then be used. See also [CameraServer].\n" -"[b]Note:[/b] Many cameras will return YCbCr images which are split into two " -"textures and need to be combined in a shader. Godot does this automatically " -"for you if you set the environment to show the camera image in the background." -msgstr "" -"Tugann fotha ceamara rochtain duit ar cheamara fisiceach amháin atá " -"ceangailte de do ghléas. Nuair a bheidh sé cumasaithe, tosóidh Godot ar " -"fhrámaí a ghabháil ón gceamara ar féidir a úsáid ansin. Féach freisin " -"[CameraServer].\n" -"[b]Nóta:[/b] Tabharfaidh go leor ceamaraí íomhánna YCbCr ar ais atá roinnte " -"ina dhá uigeacht agus ar gá iad a chomhcheangal i scáthlán. Déanann Godot é " -"seo go huathoibríoch duit má shocraíonn tú an timpeallacht chun íomhá an " -"cheamara a thaispeáint sa chúlra." - msgid "Returns feed image data type." msgstr "Tuairisceáin fotha cineál sonraí íomhá." @@ -25378,25 +21006,6 @@ msgid "Server keeping track of different cameras accessible in Godot." msgstr "" "Freastalaí ag coinneáil súil ar cheamaraí éagsúla atá inrochtana in Godot." -msgid "" -"The [CameraServer] keeps track of different cameras accessible in Godot. " -"These are external cameras such as webcams or the cameras on your phone.\n" -"It is notably used to provide AR modules with a video feed from the camera.\n" -"[b]Note:[/b] This class is currently only implemented on macOS and iOS. To " -"get a [CameraFeed] on iOS, the camera plugin from [url=https://github.com/" -"godotengine/godot-ios-plugins]godot-ios-plugins[/url] is required. On other " -"platforms, no [CameraFeed]s will be available." -msgstr "" -"Coinníonn an [CameraServer] súil ar cheamaraí éagsúla atá inrochtana i Godot. " -"Is ceamaraí seachtracha iad seo cosúil le ceamaraí gréasáin nó na ceamaraí ar " -"do ghuthán.\n" -"Úsáidtear go háirithe é chun fotha físe ón gceamara a sholáthar do mhodúil " -"AR.\n" -"[b]Nóta:[/b] Níl an rang seo curtha i bhfeidhm faoi láthair ach amháin ar " -"macOS agus iOS. Chun [CameraFeed] a fháil ar iOS, tá an breiseán ceamara ó " -"[url=https://github.com/godotengine/godot-ios-plugins]godot-ios-plugins[/url] " -"ag teastáil. Ar ardáin eile, ní bheidh aon [CameraFeed]s ar fáil." - msgid "Adds the camera [param feed] to the camera server." msgstr "Cuireann sé an ceamara [param feed] leis an bhfreastalaí ceamara." @@ -25736,14 +21345,6 @@ msgstr "" "[b]Nóta:[/b] níl éifeacht ag [leithead param] ach amháin má tá " "[code]bréagach[/code] ar [param líonta]." -msgid "" -"Draws a colored polygon of any number of points, convex or concave. Unlike " -"[method draw_polygon], a single color must be specified for the whole polygon." -msgstr "" -"Tarraingíonn sé polagán daite d’aon líon pointí, dronnach nó cuasach. Murab " -"ionann agus [method draw_polygon], ní mór dath amháin a shonrú don pholagán " -"iomlán." - msgid "" "Draws a dashed line from a 2D point to another, with a given color and width. " "See also [method draw_multiline] and [method draw_polyline].\n" @@ -25944,21 +21545,6 @@ msgstr "" "Tarraingíonn [MultiMesh] i 2T leis an uigeacht a cuireadh ar fáil. Féach " "[MultiMeshInstance2D] le haghaidh doiciméadú gaolmhar." -msgid "" -"Draws a solid polygon of any number of points, convex or concave. Unlike " -"[method draw_colored_polygon], each point's color can be changed " -"individually. See also [method draw_polyline] and [method " -"draw_polyline_colors]. If you need more flexibility (such as being able to " -"use bones), use [method RenderingServer.canvas_item_add_triangle_array] " -"instead." -msgstr "" -"Tarraingíonn sé polagán soladach d’aon líon pointí, dronnach nó cuasach. " -"Murab ionann agus [method draw_colored_polygon], is féidir dath gach pointe a " -"athrú ina aonar. Féach freisin [method draw_polyline] agus [method " -"draw_polyline_colors]. Má theastaíonn níos mó solúbthachta uait (cosúil le " -"bheith in ann cnámha a úsáid), bain úsáid as [method RenderingServer." -"canvas_item_add_triangle_array] ina ionad sin." - msgid "" "Draws interconnected line segments with a uniform [param color] and [param " "width] and optional antialiasing (supported only for positive [param width]). " @@ -26097,62 +21683,6 @@ msgstr "" "Socraíonn sé claochlú saincheaptha le haghaidh líníochta trí mhaitrís. " "Déanfar aon rud a tharraingítear ina dhiaidh sin a chlaochlú leis seo." -msgid "" -"Draws [param text] using the specified [param font] at the [param pos] " -"(bottom-left corner using the baseline of the font). The text will have its " -"color multiplied by [param modulate]. If [param width] is greater than or " -"equal to 0, the text will be clipped if it exceeds the specified width.\n" -"[b]Example using the default project font:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"# If using this method in a script that redraws constantly, move the\n" -"# `default_font` declaration to a member variable assigned in `_ready()`\n" -"# so the Control is only created once.\n" -"var default_font = ThemeDB.fallback_font\n" -"var default_font_size = ThemeDB.fallback_font_size\n" -"draw_string(default_font, Vector2(64, 64), \"Hello world\", " -"HORIZONTAL_ALIGNMENT_LEFT, -1, default_font_size)\n" -"[/gdscript]\n" -"[csharp]\n" -"// If using this method in a script that redraws constantly, move the\n" -"// `default_font` declaration to a member variable assigned in `_Ready()`\n" -"// so the Control is only created once.\n" -"Font defaultFont = ThemeDB.FallbackFont;\n" -"int defaultFontSize = ThemeDB.FallbackFontSize;\n" -"DrawString(defaultFont, new Vector2(64, 64), \"Hello world\", " -"HORIZONTAL_ALIGNMENT_LEFT, -1, defaultFontSize);\n" -"[/csharp]\n" -"[/codeblocks]\n" -"See also [method Font.draw_string]." -msgstr "" -"Tarraingíonn sé [téacs param] ag baint úsáide as an [param cló] sonraithe ag " -"an [param pos] (cúinne ag bun ar chlé ag baint úsáide as bunlíne an chló). " -"Méadófar dath an téacs faoi [param modulate]. Má tá [leithead param] níos mó " -"ná nó cothrom le 0, gearrfar an téacs má sháraíonn sé an leithead sonraithe.\n" -"[b] Sampla ag baint úsáide as an gcló réamhshocraithe tionscadail:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"# Má tá an modh seo á úsáid i script a atarraingíonn de shíor, bog an\n" -"# dearbhú `default_font` d'athróg ball sannta in `_ready()`\n" -"# mar sin ní chruthaítear an Rialúchán ach uair amháin.\n" -"var default_font = ThemeDB.fallback_font\n" -"var default_font_size = ThemeDB.fallback_font_size\n" -"draw_string(default_font, Vector2(64, 64), \"Hello world\", " -"HORIZONTAL_ALIGNMENT_LEFT, -1, default_font_size)\n" -"[/gdscript]\n" -"[csharp]\n" -"// Más rud é ag baint úsáide as an modh seo i script a redraws i gcónaí, " -"bogadh an\n" -"// dearbhú `default_font` d'athróg ball sannta in `_Ready()`\n" -"// mar sin ní chruthaítear an Rialú ach uair amháin.\n" -"Cló defaultFont = ThemeDB.FallbackFont;\n" -"int defaultFontSize = ThemeDB.FallbackFontSize;\n" -"DrawString(réamhshocraitheFont, Vector2(64, 64), \"Dia duit ar domhan\", " -"HORIZONTAL_ALIGNMENT_LEFT, -1, defaultFontSize);\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Féach freisin [method Font.draw_string]." - msgid "" "Draws [param text] outline using the specified [param font] at the [param " "pos] (bottom-left corner using the baseline of the font). The text will have " @@ -26254,6 +21784,9 @@ msgstr "" "Filleann sé an claochlú ó chóras comhordanáidí áitiúil an [CanvasItem] seo go " "dtí an córas comhordanáidí [Viewport]s." +msgid "Get the value of a shader parameter as set on this instance." +msgstr "Faigh luach paraiméadar scáthaithe mar atá leagtha síos sa chás seo." + msgid "" "Returns the mouse's position in this [CanvasItem] using the local coordinate " "system of this [CanvasItem]." @@ -26313,27 +21846,6 @@ msgstr "" "Filleann sé [code]true[/code] má chuirtear fógraí claochlaithe domhanda in " "iúl do leanaí." -msgid "" -"Returns [code]true[/code] if the node is present in the [SceneTree], its " -"[member visible] property is [code]true[/code] and all its ancestors are also " -"visible. If any ancestor is hidden, this node will not be visible in the " -"scene tree, and is therefore not drawn (see [method _draw]).\n" -"Visibility is checked only in parent nodes that inherit from [CanvasItem], " -"[CanvasLayer], and [Window]. If the parent is of any other type (such as " -"[Node], [AnimationPlayer], or [Node3D]), it is assumed to be visible." -msgstr "" -"Filleann sé [code]true[/code] má tá an nód i láthair sa [SceneTree], tá a " -"airí [ball infheicthe] [code]true[/code] agus tá a sinsir go léir le feiceáil " -"freisin. Má tá aon sinsear i bhfolach, ní bheidh an nód seo le feiceáil sa " -"chrann radharc, agus mar sin ní tharraingítear é (féach [method _draw]).\n" -"Ní dhéantar infheictheacht a sheiceáil ach amháin i nódanna tuismitheora a " -"fhaigheann oidhreacht ó [CanvasItem], [CanvasLayer], agus [Fuinneog]. Más de " -"chineál ar bith eile an tuismitheoir (amhail [Node], [AnimationPlayer], nó " -"[Node3D]), glactar leis go bhfuil sé sofheicthe." - -msgid "Assigns [param screen_point] as this node's new local transform." -msgstr "Sanntar [param screen_point] mar chlaochlú nua áitiúil an nód seo." - msgid "" "Transformations issued by [param event]'s inputs are applied in local space " "instead of global space." @@ -26396,12 +21908,6 @@ msgstr "" "chun iad a dhéanamh infheicthe ná ceann de na feidhmeanna iolracha [code] " "aníos * () [/code] a ghlaoch ina ionad." -msgid "" -"Allows the current node to clip child nodes, essentially acting as a mask." -msgstr "" -"Ligeann sé don nód reatha nóid leanbh a ghearradh, ag gníomhú go bunúsach mar " -"masc." - msgid "" "The rendering layers in which this [CanvasItem] responds to [Light2D] nodes." msgstr "" @@ -26477,46 +21983,6 @@ msgstr "" "féin agus a thuismitheoirí go léir sraith le masc maraithe chanbhás " "[Viewport]." -msgid "" -"If [code]true[/code], this [CanvasItem] is drawn. The node is only visible if " -"all of its ancestors are visible as well (in other words, [method " -"is_visible_in_tree] must return [code]true[/code]).\n" -"[b]Note:[/b] For controls that inherit [Popup], the correct way to make them " -"visible is to call one of the multiple [code]popup*()[/code] functions " -"instead." -msgstr "" -"Más [code]true[/code], tarraingítear an [CanvasItem] seo. Níl an nód le " -"feiceáil ach amháin má tá a sinsir go léir infheicthe freisin (i bhfocail " -"eile, caithfidh [method is_visible_in_tree] [code]true[/code]) a thabhairt ar " -"ais.\n" -"[b]Nóta:[/b] Maidir le rialuithe a fhaigheann [Preabfhuinneog] mar " -"oidhreacht, is é an bealach ceart chun iad a dhéanamh infheicthe ná ceann de " -"na feidhmeanna iolracha [code] aníos *()[/code] a ghlaoch ina ionad." - -msgid "" -"If [code]true[/code], this and child [CanvasItem] nodes with a higher Y " -"position are rendered in front of nodes with a lower Y position. If " -"[code]false[/code], this and child [CanvasItem] nodes are rendered normally " -"in scene tree order.\n" -"With Y-sorting enabled on a parent node ('A') but disabled on a child node " -"('B'), the child node ('B') is sorted but its children ('C1', 'C2', etc) " -"render together on the same Y position as the child node ('B'). This allows " -"you to organize the render order of a scene without changing the scene tree.\n" -"Nodes sort relative to each other only if they are on the same [member " -"z_index]." -msgstr "" -"Má tá [code]true[/code], rindreáiltear é seo agus nóid linbh [CanvasItem] a " -"bhfuil suíomh Y níos airde acu os comhair nóid le suíomh Y níos ísle. Más " -"[code]bréagach[/code] é seo, agus nóid linbh [CanvasItem] rindreáilte de " -"ghnáth in ord crann radhairc.\n" -"Le sórtáil Y cumasaithe ar nód tuismitheora ('A') ach díchumasaithe ar nód " -"linbh ('B'), déantar an nód linbh ('B') a shórtáil ach a leanaí ('C1', 'C2', " -"etc) rindreáil le chéile ar an suíomh Y céanna leis an leanbh nód ('B'). " -"Ligeann sé seo duit ord rindreála radharc a eagrú gan crann an radhairc a " -"athrú.\n" -"Ní shórtáil na nóid i gcoibhneas lena chéile ach amháin má tá siad ar an " -"gcéanna [comhalta z_index]." - msgid "" "If [code]true[/code], the node's Z index is relative to its parent's Z index. " "If this node's Z index is 2 and its parent's effective Z index is 3, then " @@ -26558,21 +22024,6 @@ msgstr "" "[b]Nóta:[/b] Ní cheadaíonn naisc iarchurtha líníocht trí na modhanna " "[code]draw_*[/code]." -msgid "Emitted when becoming hidden." -msgstr "Astaítear nuair a thagann sé i bhfolach." - -msgid "" -"Emitted when the item's [Rect2] boundaries (position or size) have changed, " -"or when an action is taking place that may have impacted these boundaries (e." -"g. changing [member Sprite2D.texture])." -msgstr "" -"Astaithe nuair a thagann athrú ar theorainneacha na míre [Rect2] (suíomh nó " -"méid), nó nuair a bhíonn gníomh ar siúl a d’fhéadfadh tionchar a bheith aige " -"ar na teorainneacha seo (m.sh. ag athrú [member Sprite2D.texture])." - -msgid "Emitted when the visibility (hidden/visible) changes." -msgstr "Astaítear nuair a athraíonn an infheictheacht (i bhfolach/infheicthe)." - msgid "" "The [CanvasItem]'s global transform has changed. This notification is only " "received if enabled by [method set_notify_transform]." @@ -26923,19 +22374,6 @@ msgstr "" "An nód saincheaptha [Viewport] a shanntar don [CanvasLayer]. Má úsáideann " "[code] null[/code], an t-amharcmharc réamhshocraithe ina ionad sin." -msgid "" -"If enabled, the [CanvasLayer] will use the viewport's transform, so it will " -"move when camera moves instead of being anchored in a fixed position on the " -"screen.\n" -"Together with [member follow_viewport_scale] it can be used for a pseudo 3D " -"effect." -msgstr "" -"Má tá sé cumasaithe, bainfidh an [CanvasLayer] úsáid as claochlú an " -"amhaircport, mar sin bogfaidh sé nuair a bhogann an ceamara in ionad é a " -"bheith ar ancaire i suíomh seasta ar an scáileán.\n" -"In éineacht le [comhalta follow_viewport_scale] is féidir é a úsáid le " -"haghaidh éifeacht bhréige 3D." - msgid "" "Scales the layer when using [member follow_viewport_enabled]. Layers moving " "into the foreground should have increasing scales, while layers moving into " @@ -26999,6 +22437,9 @@ msgstr "" "amháin a úsáid chun canbhás a dhathú, ach is féidir [CanvasLayer]s a úsáid " "chun rudaí a dhéanamh go neamhspleách." +msgid "2D lights and shadows" +msgstr "Soilse agus scáthanna 2D" + msgid "The tint color to apply." msgstr "An dath tint a chur i bhfeidhm." @@ -27290,49 +22731,6 @@ msgstr "" "ghluaiseacht trasnánach ar ais, i gcomparáid le [treoluas na mball] a thugann " "an treoluas iarrtha ar ais." -msgid "" -"Returns a [KinematicCollision2D], which contains information about a " -"collision that occurred during the last call to [method move_and_slide]. " -"Since the body can collide several times in a single call to [method " -"move_and_slide], you must specify the index of the collision in the range 0 " -"to ([method get_slide_collision_count] - 1).\n" -"[b]Example usage:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"for i in get_slide_collision_count():\n" -" var collision = get_slide_collision(i)\n" -" print(\"Collided with: \", collision.get_collider().name)\n" -"[/gdscript]\n" -"[csharp]\n" -"for (int i = 0; i < GetSlideCollisionCount(); i++)\n" -"{\n" -" KinematicCollision2D collision = GetSlideCollision(i);\n" -" GD.Print(\"Collided with: \", (collision.GetCollider() as Node).Name);\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Filleann sé [KinematicCollision2D], ina bhfuil faisnéis faoi imbhualadh a " -"tharla le linn an ghlao deiridh chuig [metho move_and_slide]. Ós rud é gur " -"féidir leis an gcorp imbhualadh arís agus arís eile i nglao amháin chuig " -"[method move_and_slide], ní mór duit innéacs an imbhuailte a shonrú sa raon 0 " -"go ([method get_slide_collision_count] - 1).\n" -"[b]Úsáid shamplach:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"for i in get_slide_collision_count():\n" -" var collision = get_slide_collision(i)\n" -" print(\"Iompaithe le: \", collision.get_collider().name)\n" -"[/gdscript]\n" -"[csharp]\n" -"for (int i = 0; i < GetSlideCollisionCount(); i++)\n" -"{\n" -" KinematicCollision2D collision = GetSlideCollision(i);\n" -" GD.Print(\"Iompaithe le: \", (collision.GetCollider() as Node).Name);\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Returns the number of times the body collided and changed direction during " "the last call to [method move_and_slide]." @@ -27875,9 +23273,6 @@ msgstr "" msgid "BBCode in RichTextLabel" msgstr "BBCode chuig RichTextLabel" -msgid "RichTextEffect test project (third-party)" -msgstr "Tionscadal tástála RichTextEffect (tríú páirtí)" - msgid "The color the character will be drawn with." msgstr "An dath a bheidh an carachtar a tharraingt leis." @@ -27922,51 +23317,10 @@ msgstr "" "1)}\n" "[/codeblock]" -msgid "Font resource used to render glyph." -msgstr "Acmhainn cló a úsáidtear chun glyph a sholáthar." - -msgid "" -"Number of glyphs in the grapheme cluster. This value is set in the first " -"glyph of a cluster. Setting this property won't affect drawing." -msgstr "" -"Líon na glyphs sa bhraisle grapheme. Tá an luach seo socraithe sa chéad glyph " -"de bhraisle. Ní bheidh tionchar ag an airí seo ar líníocht." - -msgid "" -"Glyph flags. See [enum TextServer.GraphemeFlag] for more info. Setting this " -"property won't affect drawing." -msgstr "" -"Bratacha Glyph. Féach [enum TextServer.GraphemeFlag] le haghaidh tuilleadh " -"eolais. Ní bheidh tionchar ag an airí seo ar líníocht." - -msgid "Font specific glyph index." -msgstr "Cló-innéacs glyph sonrach." - msgid "The position offset the character will be drawn with (in pixels)." msgstr "" "Déanfar suíomh an fhritháirimh an charachtair a tharraingt le (i bpicteilíní)." -msgid "" -"If [code]true[/code], FX transform is called for outline drawing. Setting " -"this property won't affect drawing." -msgstr "" -"Más [code]true[/code], glaoitear trasfhoirmiú FX le haghaidh líníocht imlíne. " -"Ní bheidh tionchar ag an airí seo ar líníocht." - -msgid "" -"Absolute character range in the string, corresponding to the glyph. Setting " -"this property won't affect drawing." -msgstr "" -"Raon carachtar iomlán sa téad, a fhreagraíonn don glyph. Ní bheidh tionchar " -"ag an airí seo ar líníocht." - -msgid "" -"The character offset of the glyph, relative to the current [RichTextEffect] " -"custom block. Setting this property won't affect drawing." -msgstr "" -"Fritháireamh carachtar an glyph, i gcoibhneas leis an mbloc saincheaptha " -"[RichTextEffect] reatha. Ní bheidh tionchar ag an airí seo ar líníocht." - msgid "" "The current transform of the current glyph. It can be overridden (for " "example, by driving the position and rotation from a curve). You can also " @@ -28439,13 +23793,6 @@ msgstr "" "Más [Teaghrán] folamh é [param line_only] [code]true[/code] nó [param " "end_key], ní aistríonn an réigiún anonn go dtí an chéad líne eile." -msgid "" -"Returns if the given line is foldable, that is, it has indented lines right " -"below it or a comment / string block." -msgstr "" -"Filleann sé má tá an líne a thugtar infhillte, is é sin, go bhfuil línte " -"eangaithe díreach faoina bhun nó bloc nóta tráchta / teaghráin." - msgid "Cancels the autocomplete menu." msgstr "Cealaigh an roghchlár uathchríochnaithe." @@ -28506,12 +23853,6 @@ msgstr "" msgid "Deletes all lines that are selected or have a caret on them." msgstr "Scrios gach líne a roghnaítear nó a bhfuil cúram orthu." -msgid "" -"Perform an indent as if the user activated the \"ui_text_indent\" action." -msgstr "" -"Déan fleasc amhail is gur chuir an t-úsáideoir an gníomh \"ui_text_indent\" i " -"ngníomh." - msgid "" "Duplicates all lines currently selected with any caret. Duplicates the entire " "line beneath the current one no matter where the caret is within the line." @@ -28613,9 +23954,6 @@ msgstr "" msgid "Gets all executing lines." msgstr "Faigheann gach líne forghníomhaitheach." -msgid "Returns all lines that are current folded." -msgstr "Filleann sé gach líne atá reatha fillte." - msgid "" "Returns the full text with char [code]0xFFFF[/code] at the caret location." msgstr "" @@ -28648,11 +23986,6 @@ msgstr "Filleann sé [code]true[/code] má tá nóta tráchta [param start_key] msgid "Returns [code]true[/code] if string [param start_key] exists." msgstr "Filleann sé [code]true[/code] má tá teaghrán [param start_key] ann." -msgid "" -"Indents selected lines, or in the case of no selection the caret line by one." -msgstr "" -"Feannadh línte roghnaithe, nó i gcás aon roghnú an caret líne ar cheann." - msgid "" "Returns delimiter index if [param line] [param column] is in a comment. If " "[param column] is not provided, will return delimiter index if the entire " @@ -28671,36 +24004,6 @@ msgstr "" "Mura soláthraítear [param column], seolfar an t-innéacs teorannaithe ar ais " "más teaghrán í an [líne pharam] ar fad. Seachas sin [code]-1[/code]." -msgid "Returns whether the line at the specified index is bookmarked or not." -msgstr "" -"Filleann sé cibé an bhfuil an líne ag an innéacs sonraithe leabharmharcáilte " -"nó nach bhfuil." - -msgid "Returns whether the line at the specified index is breakpointed or not." -msgstr "" -"Tuairisceáin cibé an bhfuil an líne ag an innéacs sonraithe brisphointe nó " -"nach bhfuil." - -msgid "Returns whether the line at the specified index is a code region end." -msgstr "" -"Tuairisceáin cibé an bhfuil an líne ag an innéacs sonraithe críoch réigiún " -"cód." - -msgid "Returns whether the line at the specified index is a code region start." -msgstr "" -"Tuairisceáin cibé an bhfuil an líne ag an innéacs sonraithe tús réigiún cód." - -msgid "" -"Returns whether the line at the specified index is marked as executing or not." -msgstr "" -"Tuairisceáin cibé an bhfuil an líne ag an innéacs sonraithe marcáilte mar " -"fhorghníomhú nó nach bhfuil." - -msgid "Returns whether the line at the specified index is folded or not." -msgstr "" -"Tuairisceáin cibé an bhfuil an líne ag an innéacs sonraithe fillte nó nach " -"bhfuil." - msgid "Moves all lines down that are selected or have a caret on them." msgstr "Bogtar gach líne síos a roghnaítear nó a bhfuil cúram air." @@ -28731,23 +24034,11 @@ msgstr "Socraíonn sé an rogha críochnaithe reatha roghnaithe." msgid "Sets the code hint text. Pass an empty string to clear." msgstr "Socraíonn an cód leid téacs. Pas teaghrán folamh a ghlanadh." -msgid "Sets if the code hint should draw below the text." -msgstr "Socraíonn sé ar cheart an leid cód a tharraingt faoin téacs." - msgid "Sets the code region start and end tags (without comment delimiter)." msgstr "" "Socraíonn sé clibeanna tosaigh agus deireadh réigiún an chóid (gan teorannóir " "tráchta)." -msgid "Sets the line as bookmarked." -msgstr "Socraíonn sé an líne mar leabharmharcáilte." - -msgid "Sets the line as breakpointed." -msgstr "Socraíonn sé an líne mar brisphointe." - -msgid "Sets the line as executing." -msgstr "Socraíonn sé an líne mar fhorghníomhú." - msgid "Sets the symbol emitted by [signal symbol_validate] as a valid lookup." msgstr "" "Socraíonn sé an tsiombail a astaíonn [signal symbol_validate] mar chuardach " @@ -28759,19 +24050,6 @@ msgstr "Scoránaigh fillte an bhloic chóid ag an líne tugtha." msgid "Toggle the folding of the code block on all lines with a caret on them." msgstr "Scoránaigh fillte an bhloic chóid ar gach líne agus airíoch orthu." -msgid "Unfolds all lines, folded or not." -msgstr "Leathnaíonn gach líne, fillte nó nach bhfuil." - -msgid "Unfolds all lines that were previously folded." -msgstr "Unfolds gach líne a bhí fillte roimhe seo." - -msgid "" -"Unindents selected lines, or in the case of no selection the caret line by " -"one. Same as performing \"ui_text_unindent\" action." -msgstr "" -"Neamhindents línte roghnaithe, nó i gcás aon roghnú an caret líne ar cheann. " -"Mar an gcéanna le gníomh \"ui_text_unindent\" a dhéanamh." - msgid "" "Submits all completion options added with [method " "add_code_completion_option]. Will try to force the autocomplete menu to " @@ -28783,18 +24061,6 @@ msgstr "" "a bhrú chun aníos, más rud é go bhfuil [param force] [code]true[/code].\n" "[b]Nóta:[/b] Gabhfaidh sé seo ionad na n-iarrthóirí reatha go léir." -msgid "Sets whether brace pairs should be autocompleted." -msgstr "Socraíonn sé cé acu ar cheart péirí brace a uathchríochnú." - -msgid "Highlight mismatching brace pairs." -msgstr "Aibhsigh péirí brace neamhréireacha." - -msgid "Sets the brace pairs to be autocompleted." -msgstr "Socraíonn sé na péirí brace a uathchríochnú." - -msgid "Sets whether code completion is allowed." -msgstr "Socraíonn sé cé acu an gceadaítear comhlánú an chóid." - msgid "Sets prefixes that will trigger code completion." msgstr "Socraíonn sé réimíreanna a spreagfaidh críochnú cód." @@ -28810,49 +24076,6 @@ msgstr "" "Socraíonn sé na teorannóirí teaghrán. Bainfear na teorannóirí teaghrán go " "léir atá ann cheana féin." -msgid "" -"Sets if bookmarked should be drawn in the gutter. This gutter is shared with " -"breakpoints and executing lines." -msgstr "" -"Ba chóir tacair má tá leabharmharcáilte orthu a tharraingt sa gháitéir. " -"Roinntear an gutter seo le brisphointí agus línte forghníomhaithe." - -msgid "" -"Sets if breakpoints should be drawn in the gutter. This gutter is shared with " -"bookmarks and executing lines." -msgstr "" -"Socraíonn sé ar cheart bristephointí a tharraingt sa gháitéir. Roinntear an " -"gutter seo le leabharmharcanna agus línte forghníomhaithe." - -msgid "" -"Sets if executing lines should be marked in the gutter. This gutter is shared " -"with breakpoints and bookmarks lines." -msgstr "" -"Socraíonn sé ar chóir línte forghníomhaithe a mharcáil sa gháitéir. Roinntear " -"an gáitéar seo le brisphointí agus línte leabharmharcanna." - -msgid "Sets if foldable lines icons should be drawn in the gutter." -msgstr "" -"Socraítear ar cheart deilbhíní línte infhillte a tharraingt sa gháitéir." - -msgid "Sets if line numbers should be drawn in the gutter." -msgstr "Socraíonn sé ar cheart uimhreacha línte a tharraingt sa gháitéir." - -msgid "Sets if line numbers drawn in the gutter are zero padded." -msgstr "" -"Socraítear an bhfuil stuáil nialasach ag na huimhreacha línte a " -"tharraingítear sa gháitéir." - -msgid "" -"Sets whether automatic indent are enabled, this will add an extra indent if a " -"prefix or brace is found." -msgstr "" -"Socraítear cé acu an bhfuil fleasc uathoibríoch cumasaithe, cuirfidh sé seo " -"fleasc breise leis má aimsítear réimír nó brace." - -msgid "Prefixes to trigger an automatic indent." -msgstr "Réimíreanna chun fleasc uathoibríoch a spreagadh." - msgid "" "Size of the tabulation indent (one [kbd]Tab[/kbd] press) in characters. If " "[member indent_use_spaces] is enabled the number of spaces to use." @@ -28863,9 +24086,6 @@ msgstr "" msgid "Use spaces instead of tabs for indentation." msgstr "Úsáid spásanna in ionad cluaisíní le haghaidh eangú." -msgid "Sets whether line folding is allowed." -msgstr "Socraíonn sé cibé an gceadaítear fillte líne." - msgid "" "Draws vertical lines at the provided columns. The first entry is considered a " "main hard guideline and is draw more prominently." @@ -28887,20 +24107,9 @@ msgstr "" "Astaítear nuair a chuirtear brisphointe leis nó nuair a bhaintear as líne é. " "Má bhogtar an líne trí chúlspás astaítear earra a bhaintear ag an tseanlíne." -msgid "Emitted when the user requests code completion." -msgstr "Astaítear nuair a iarrann an t-úsáideoir críochnú an chóid." - msgid "Emitted when the user has clicked on a valid symbol." msgstr "Astaítear nuair a chliceáil an t-úsáideoir ar shiombail bhailí." -msgid "" -"Emitted when the user hovers over a symbol. The symbol should be validated " -"and responded to, by calling [method set_symbol_lookup_word_as_valid]." -msgstr "" -"Astaítear nuair a aistríonn an t-úsáideoir thar siombail. Ba cheart an " -"tsiombail a bhailíochtú agus freagra a thabhairt uirthi, trí ghlao a chur ar " -"[method set_symbol_lookup_word_as_valid]." - msgid "Marks the option as a class." msgstr "Marcáil an rogha mar rang." @@ -29808,24 +25017,6 @@ msgstr "" msgid "A node that provides a polygon shape to a [CollisionObject2D] parent." msgstr "Nód a sholáthraíonn cruth polagán do thuismitheoir [CollisionObject2D]." -msgid "" -"A node that provides a polygon shape to a [CollisionObject2D] parent and " -"allows to edit it. The polygon can be concave or convex. This can give a " -"detection shape to an [Area2D], turn [PhysicsBody2D] into a solid object, or " -"give a hollow shape to a [StaticBody2D].\n" -"[b]Warning:[/b] A non-uniformly scaled [CollisionShape2D] will likely not " -"behave as expected. Make sure to keep its scale the same on all axes and " -"adjust its shape resource instead." -msgstr "" -"Nód a sholáthraíonn cruth polagán do thuismitheoir [CollisionObject2D] agus a " -"cheadaíonn é a chur in eagar. Is féidir leis an polagán a bheith cuasach nó " -"dronnach. Is féidir leis seo cruth braite a thabhairt do [Area2D], " -"[FisicBody2D] a iompú ina réad soladach, nó cruth cuasach a thabhairt do " -"[StaticBody2D].\n" -"[b]Rabhadh:[/b] Is dócha nach n-iompróidh [CollisionShape2D] ar scála neamh-" -"aonfhoirmeach mar a bhíothas ag súil leis. Bí cinnte a scála a choinneáil mar " -"an gcéanna ar gach ais agus a cruth acmhainn a choigeartú ina ionad." - msgid "Collision build mode. Use one of the [enum BuildMode] constants." msgstr "Modh tógála imbhuailte. Úsáid ceann de na tairisigh [enum BuildMode]." @@ -29946,18 +25137,6 @@ msgstr "" msgid "Physics introduction" msgstr "Réamhrá fisic" -msgid "" -"The collision shape debug color.\n" -"[b]Note:[/b] The default value is [member ProjectSettings.debug/shapes/" -"collision/shape_color]. The [code]Color(0, 0, 0, 1)[/code] value documented " -"here is a placeholder, and not the actual default debug color." -msgstr "" -"An dath dífhabhtaithe cruth imbhuailte.\n" -"[b]Nóta:[/b] Is é an luach réamhshocraithe [comhalta ProjectSettings.debug/" -"shapes/collision/shape_color]. Is sealbhóir áite é an luach [code]Dath(0, 0, " -"0, 1)[/code] atá doiciméadaithe anseo, agus ní an dath dífhabhtaithe " -"réamhshocraithe iarbhír." - msgid "" "A disabled collision shape has no effect in the world. This property should " "be changed with [method Object.set_deferred]." @@ -30074,17 +25253,6 @@ msgstr "Taispeántas Idirshuíomh Tween" msgid "GUI Drag And Drop Demo" msgstr "Taispeántas Tarraing Agus Buail GUI" -msgid "" -"Constructs a default [Color] from opaque black. This is the same as [constant " -"BLACK].\n" -"[b]Note:[/b] in C#, constructs an empty color with all of its components set " -"to [code]0.0[/code] (transparent black)." -msgstr "" -"Tógann sé réamhshocrú [Color] as dubh teimhneach. Tá sé seo mar an gcéanna le " -"[DUBH leanúnach].\n" -"[b]Nóta:[/b] in C#, tógann sé dath folamh agus a chuid comhpháirteanna uile " -"socraithe go [code]0.0[/code] (dubh trédhearcach)." - msgid "" "Constructs a [Color] from the existing color, with [member a] set to the " "given [param alpha] value.\n" @@ -31606,9 +26774,6 @@ msgstr "An uigeacht le haghaidh an grabber arrow." msgid "Custom texture for the hue selection slider on the right." msgstr "Uigeacht shaincheaptha don sleamhnán roghnóireachta lí ar dheis." -msgid "Custom texture for the H slider in the OKHSL color mode." -msgstr "Uigeacht saincheaptha don sleamhnán H i mód dath OKHSL." - msgid "The icon for color preset drop down menu when expanded." msgstr "" "An deilbhín don roghchlár anuas réamhshocraithe dathanna nuair a leathnaítear " @@ -31810,52 +26975,6 @@ msgstr "" "Soláthraíonn [param render_data] rochtain ar an stát rindreála, níl sé bailí " "ach le linn rindreála agus níor cheart é a stóráil." -msgid "" -"If [code]true[/code] and MSAA is enabled, this will trigger a color buffer " -"resolve before the effect is run.\n" -"[b]Note:[/b] In [method _render_callback], to access the resolved buffer " -"use:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var color_buffer = render_scene_buffers.get_texture(\"render_buffers\", " -"\"color\")\n" -"[/codeblock]" -msgstr "" -"Má tá [code]true[/code] agus MSAA cumasaithe, spreagfaidh sé seo réiteach " -"maoláin datha sula rithfear an éifeacht.\n" -"[b]Nóta:[/b] I [method _render_callback], chun an úsáid maoláin réitithe a " -"rochtain:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var color_buffer = render_scene_buffers.get_texture (\"render_buffers\", " -"\"dath\")\n" -"[/codeblock]" - -msgid "" -"If [code]true[/code] and MSAA is enabled, this will trigger a depth buffer " -"resolve before the effect is run.\n" -"[b]Note:[/b] In [method _render_callback], to access the resolved buffer " -"use:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var depth_buffer = render_scene_buffers.get_texture(\"render_buffers\", " -"\"depth\")\n" -"[/codeblock]" -msgstr "" -"Má tá [code]true[/code] agus MSAA cumasaithe, spreagfaidh sé seo réiteach " -"maoláin doimhneachta sula rithfear an éifeacht.\n" -"[b]Nóta:[/b] I [method _render_callback], chun an úsáid maoláin réitithe a " -"rochtain:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var depth_buffer = render_scene_buffers.get_texture(\"render_buffers\", " -"\"doimhneacht\")\n" -"[/codeblock]" - msgid "" "The type of effect that is implemented, determines at what stage of rendering " "the callback is called." @@ -31870,51 +26989,6 @@ msgstr "" "Más [code]true[/code] a chuirtear an éifeacht rindreála seo i bhfeidhm ar aon " "amharcmharc a gcuirtear leis." -msgid "" -"If [code]true[/code] this triggers motion vectors being calculated during the " -"opaque render state.\n" -"[b]Note:[/b] In [method _render_callback], to access the motion vector buffer " -"use:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var motion_buffer = render_scene_buffers.get_velocity_texture()\n" -"[/codeblock]" -msgstr "" -"Más [code]true[/code] é seo spreagtar veicteoirí gluaisne á ríomh le linn an " -"staid rindreála teimhneach.\n" -"[b]Nóta:[/b] I [method _render_callback], chun úsáid maolán an veicteora " -"gluaisne a rochtain:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var motion_buffer = render_scene_buffers.get_velocity_texture()\n" -"[/codeblock]" - -msgid "" -"If [code]true[/code] this triggers normal and roughness data to be output " -"during our depth pre-pass, only applicable for the Forward+ renderer.\n" -"[b]Note:[/b] In [method _render_callback], to access the roughness buffer " -"use:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var roughness_buffer = render_scene_buffers." -"get_texture(\"forward_clustered\", \"normal_roughness\")\n" -"[/codeblock]" -msgstr "" -"Más rud é [code]true[/code] cuireann sé seo faoi deara gnáthshonraí agus " -"sonraí gharbh a bheith aschurtha le linn ár réamhphasáil doimhneachta, ní " -"bhaineann siad ach leis an rindreálaí Forward+.\n" -"[b]Nóta:[/b] I [method _render_callback], chun rochtain a fháil ar an úsáid " -"maoláin gharbhais:\n" -"[codeblock]\n" -"var render_scene_buffers : RenderSceneBuffersRD = render_data." -"get_render_scene_buffers()\n" -"var roughness_buffer = render_scene_buffers.get_texture(\"ar " -"aghaidh_cnuasach\", \"gnáth_roughness\")\n" -"[/codeblock]" - msgid "" "If [code]true[/code] this triggers specular data being rendered to a separate " "buffer and combined after effects have been applied, only applicable for the " @@ -31954,13 +27028,6 @@ msgstr "" "Tugtar an aisghlao roimh ár bpas rindreála trédhearcach, ach tar éis ár spéir " "a rindreáil agus ár maoláin cúil a chruthú." -msgid "" -"The callback is called after our transparent rendering pass, but before any " -"build in post effects and output to our render target." -msgstr "" -"Glaoitear an aisghlao tar éis ár bpas rindreála trédhearcach, ach roimh aon " -"éifeachtaí postála agus aschur chuig ár sprioc rindreála." - msgid "Represents the size of the [enum EffectCallbackType] enum." msgstr "Léiríonn sé méid an [enum EffectCallbackType] enum." @@ -32928,87 +27995,6 @@ msgstr "" "Bunrang do gach rialú GUI. Déanann sé a shuíomh agus a mhéid a oiriúnú " "bunaithe ar a rialú tuismitheora." -msgid "" -"Base class for all UI-related nodes. [Control] features a bounding rectangle " -"that defines its extents, an anchor position relative to its parent control " -"or the current viewport, and offsets relative to the anchor. The offsets " -"update automatically when the node, any of its parents, or the screen size " -"change.\n" -"For more information on Godot's UI system, anchors, offsets, and containers, " -"see the related tutorials in the manual. To build flexible UIs, you'll need a " -"mix of UI elements that inherit from [Control] and [Container] nodes.\n" -"[b]User Interface nodes and input[/b]\n" -"Godot propagates input events via viewports. Each [Viewport] is responsible " -"for propagating [InputEvent]s to their child nodes. As the [member SceneTree." -"root] is a [Window], this already happens automatically for all UI elements " -"in your game.\n" -"Input events are propagated through the [SceneTree] from the root node to all " -"child nodes by calling [method Node._input]. For UI elements specifically, it " -"makes more sense to override the virtual method [method _gui_input], which " -"filters out unrelated input events, such as by checking z-order, [member " -"mouse_filter], focus, or if the event was inside of the control's bounding " -"box.\n" -"Call [method accept_event] so no other node receives the event. Once you " -"accept an input, it becomes handled so [method Node._unhandled_input] will " -"not process it.\n" -"Only one [Control] node can be in focus. Only the node in focus will receive " -"events. To get the focus, call [method grab_focus]. [Control] nodes lose " -"focus when another node grabs it, or if you hide the node in focus.\n" -"Sets [member mouse_filter] to [constant MOUSE_FILTER_IGNORE] to tell a " -"[Control] node to ignore mouse or touch events. You'll need it if you place " -"an icon on top of a button.\n" -"[Theme] resources change the Control's appearance. If you change the [Theme] " -"on a [Control] node, it affects all of its children. To override some of the " -"theme's parameters, call one of the [code]add_theme_*_override[/code] " -"methods, like [method add_theme_font_override]. You can override the theme " -"with the Inspector.\n" -"[b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you " -"can't access their values using [method Object.get] and [method Object.set]. " -"Instead, use the [code]get_theme_*[/code] and [code]add_theme_*_override[/" -"code] methods provided by this class." -msgstr "" -"Bunrang do gach nóid a bhaineann le UI. [Rialú] gnéithe dronuilleog teorann a " -"shainíonn a mhéid, suíomh ancaire i gcoibhneas lena rialú tuismitheora nó an " -"radharcport reatha, agus fritháirimh i gcoibhneas leis an ancaire. " -"Nuashonraíonn na fritháirimh go huathoibríoch nuair a athraíonn an nód, aon " -"cheann dá thuismitheoirí, nó méid an scáileáin.\n" -"Le haghaidh tuilleadh faisnéise ar chóras Chomhéadain Godot, ancairí, " -"fritháirimh, agus coimeádáin, féach na ranganna teagaisc gaolmhara sa " -"lámhleabhar. Chun Comhéadain Chomhéadain solúbtha a thógáil, beidh meascán " -"d’eilimintí Chomhéadain uait a fhaigheann oidhreacht ó nóid [Rialú] agus " -"[Coimeádán].\n" -"[b]Nóid Chomhéadain Úsáideora agus ionchur[/b]\n" -"Iomadaíonn Godot imeachtaí ionchuir trí phoirt amhairc. Tá gach [Viewport] " -"freagrach as [InputEvent]s a iomadú chuig a nóid linbh. Toisc gur [Fuinneog] " -"é an [ball SceneTree.root], tarlaíonn sé seo go huathoibríoch cheana féin le " -"haghaidh gach eilimint Chomhéadain i do chluiche.\n" -"Déantar imeachtaí ionchuir a iomadú tríd an [SceneTree] ón bhfréamh nód chuig " -"gach nód linbh trí ghlaoch a chur ar [method Node._input]. Maidir le " -"heilimintí Chomhéadain go sonrach, is mó ciall an modh fíorúil [method " -"_gui_input] a shárú, a dhéanann scagadh ar imeachtaí ionchuir " -"neamhghaolmhara, mar shampla trí ordú z, [comhalta luiche_filter], fócas a " -"sheiceáil, nó an raibh an t-imeacht taobh istigh den rialú bosca teorann.\n" -"Glaoigh ar [method glacadh_event] mar sin ní bhfaighidh aon nód eile an t-" -"imeacht. Nuair a ghlacann tú le hionchur, déantar é a láimhseáil mar sin ní " -"phróiseálfaidh [method Node._unhandled_input] é.\n" -"Ní féidir ach nód [Rialú] amháin a bheith i bhfócas. Ní bhfaighidh ach an nód " -"i bhfócas imeachtaí. Chun an fócas a fháil, cuir glaoch ar [method " -"grab_focus]. [rialú] cailleann nóid fócas nuair a grabann nód eile é, nó má " -"cheiltíonn tú an nód i bhfócas.\n" -"Socraíonn sé [comhalta luiche_scagaire] go [MOUSE_FILTER_IGNORE leanúnach] " -"chun nód [Rialú] a insint chun neamhaird a dhéanamh ar imeachtaí luiche nó " -"tadhaill. Beidh sé uait má chuireann tú deilbhín ar bharr an chnaipe.\n" -"Athraíonn acmhainní [Téama] cuma an Rialaithe. Má athraíonn tú an [Téama] ar " -"nód [Rialú], bíonn tionchar aige ar a leanaí go léir. Chun cuid de " -"pharaiméadair an téama a shárú, cuir glaoch ar cheann de na modhanna [code] " -"add_theme_*_override[/code], amhail [method add_theme_font_override]. " -"Féadfaidh tú an téama a shárú leis an gCigire.\n" -"[b]Nóta:[/b] [i]ní [/i] airíonna [réad] atá sna míreanna téama. Ciallaíonn sé " -"seo nach féidir leat rochtain a fháil ar a luachanna trí úsáid a bhaint as " -"[method Object.get] agus [method Object.set]. Ina áit sin, úsáid na modhanna " -"[code]get_theme_*[/code] agus [code]add_theme_*_override[/code] a chuir an " -"rang seo ar fáil." - msgid "GUI documentation index" msgstr "Innéacs doiciméadú GUI" @@ -33068,60 +28054,6 @@ msgstr "" "[/csharp]\n" "[/codeblocks]" -msgid "" -"Godot calls this method to pass you the [param data] from a control's [method " -"_get_drag_data] result. Godot first calls [method _can_drop_data] to test if " -"[param data] is allowed to drop at [param at_position] where [param " -"at_position] is local to this control.\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _can_drop_data(position, data):\n" -" return typeof(data) == TYPE_DICTIONARY and data.has(\"color\")\n" -"\n" -"func _drop_data(position, data):\n" -" var color = data[\"color\"]\n" -"[/gdscript]\n" -"[csharp]\n" -"public override bool _CanDropData(Vector2 atPosition, Variant data)\n" -"{\n" -" return data.VariantType == Variant.Type.Dictionary && dict." -"AsGodotDictionary().ContainsKey(\"color\");\n" -"}\n" -"\n" -"public override void _DropData(Vector2 atPosition, Variant data)\n" -"{\n" -" Color color = data.AsGodotDictionary()[\"color\"].AsColor();\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" -msgstr "" -"Glaonn Godot ar an modh seo chun na [sonraí param] ó thoradh [modh " -"_get_drag_data] rialaithe a thabhairt duit. Glaonn Godot ar [modh " -"_can_drop_data] ar dtús chun a thástáil an gceadaítear do [sonraí param] " -"titim ag [param at_position] áit a bhfuil [param at_position] áitiúil don " -"rialú seo.\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _can_drop_data(position, data):\n" -" return typeof(data) == TYPE_DICTIONARY and data.has(\"dath\")\n" -"\n" -"func _drop_data(position, data):\n" -" var dath = data[\"dath\"]\n" -"[/gdscript]\n" -"[csharp]\n" -"public override bool _CanDropData(Vector2 atPosition, Variant data)\n" -"{\n" -" return data.VariantType == Variant.Type.Dictionary && dict." -"AsGodotDictionary().ContainsKey(\"dath\");\n" -"}\n" -"\n" -"public override void _DropData(Vector2 atPosition, Variant data)\n" -"{\n" -" Color dath = data.AsGodotDictionary()[\"dath\"].AsColor();\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]" - msgid "" "Godot calls this method to get data that can be dragged and dropped onto " "controls that expect drop data. Returns [code]null[/code] if there is no data " @@ -33204,92 +28136,6 @@ msgstr "" "[Painéal Coimeádán] etc.). Ní féidir é a úsáid ach leis na nóid GUI is " "bunúsaí, mar [Rialú], [Coimeádán], [Painéal] etc." -msgid "" -"Virtual method to be implemented by the user. Returns the tooltip text for " -"the position [param at_position] in control's local coordinates, which will " -"typically appear when the cursor is resting over this control. See [method " -"get_tooltip].\n" -"[b]Note:[/b] If this method returns an empty [String], no tooltip is " -"displayed." -msgstr "" -"Modh fíorúil le cur i bhfeidhm ag an úsáideoir. Seoltar ar ais an téacs leid " -"uirlisí don suíomh [param at_position] i gcomhordanáidí áitiúla an rialaithe, " -"a thaispeánfar go hiondúil nuair a bhíonn an cúrsóir ina luí ar an rialú seo. " -"Féach ar [method get_tooltip].\n" -"[b]Nóta:[/b] Má sheolann an modh seo [Teaghrán] folamh ar ais, ní " -"thaispeánfar leid uirlisí ar bith." - -msgid "" -"Virtual method to be implemented by the user. Use this method to process and " -"accept inputs on UI elements. See [method accept_event].\n" -"[b]Example usage for clicking a control:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _gui_input(event):\n" -" if event is InputEventMouseButton:\n" -" if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:\n" -" print(\"I've been clicked D:\")\n" -"[/gdscript]\n" -"[csharp]\n" -"public override void _GuiInput(InputEvent @event)\n" -"{\n" -" if (@event is InputEventMouseButton mb)\n" -" {\n" -" if (mb.ButtonIndex == MouseButton.Left && mb.Pressed)\n" -" {\n" -" GD.Print(\"I've been clicked D:\");\n" -" }\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"The event won't trigger if:\n" -"* clicking outside the control (see [method _has_point]);\n" -"* control has [member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n" -"* control is obstructed by another [Control] on top of it, which doesn't have " -"[member mouse_filter] set to [constant MOUSE_FILTER_IGNORE];\n" -"* control's parent has [member mouse_filter] set to [constant " -"MOUSE_FILTER_STOP] or has accepted the event;\n" -"* it happens outside the parent's rectangle and the parent has either [member " -"clip_contents] enabled.\n" -"[b]Note:[/b] Event position is relative to the control origin." -msgstr "" -"Modh fíorúil le cur i bhfeidhm ag an úsáideoir. Bain úsáid as an modh seo " -"chun ionchuir ar eilimintí Chomhéadain a phróiseáil agus a ghlacadh. Féach ar " -"[modh glacadh_imeacht].\n" -"[b]Úsáid shamplach chun rialtán a chliceáil:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _gui_input(event):\n" -" if event is InputEventMouseButton:\n" -" if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:\n" -" print(\"I've been clicked D:\")\n" -"[/gdscript]\n" -"[csharp]\n" -"sáraithe poiblí ar neamhní _GuiInput(InputEvent @event)\n" -"{\n" -" más rud é (@event is InputEventMouseButton mb)\n" -" {\n" -" má (mb.ButtonIndex == MouseButton.Left && mb.Pressed)\n" -" {\n" -" GD.Print (\"Tá mé cliceáil:\");\n" -" }\n" -" }\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"Ní chuirfear tús leis an imeacht más rud é:\n" -"* cliceáil lasmuigh den rialú (féach [modh _has_point]);\n" -"* tá [ball mouse_filter] socraithe ag an rialú go [MOUSE_FILTER_IGNORE];\n" -"* cuireann [Rialú] eile bac ar an rialú ar a bharr, nach bhfuil [comhalta " -"luiche_scagaire] socraithe go [MOUSE_FILTER_IGNORE];\n" -"* tá [comhalta luiche_filter] socraithe ag tuismitheoir an rialaithe chuig " -"[MOUSE_FILTER_STOP leanúnach] nó ghlac sé leis an imeacht;\n" -"* tarlaíonn sé lasmuigh de dhronuilleog an tuismitheora agus tá [member " -"clip_contents] cumasaithe ag an tuismitheoir.\n" -"[b]Tabhair faoi deara:[/b] Tá suíomh an imeachta i gcoibhneas le tionscnamh " -"an rialaithe." - msgid "" "Virtual method to be implemented by the user. Returns whether the given " "[param point] is inside this control.\n" @@ -33306,119 +28152,6 @@ msgstr "" "is féidir leat [code]Rect2(Vector2.ZERO, size).has_point(point)[/code] a " "úsáid." -msgid "" -"Virtual method to be implemented by the user. Returns a [Control] node that " -"should be used as a tooltip instead of the default one. The [param for_text] " -"includes the contents of the [member tooltip_text] property.\n" -"The returned node must be of type [Control] or Control-derived. It can have " -"child nodes of any type. It is freed when the tooltip disappears, so make " -"sure you always provide a new instance (if you want to use a pre-existing " -"node from your scene tree, you can duplicate it and pass the duplicated " -"instance). When [code]null[/code] or a non-Control node is returned, the " -"default tooltip will be used instead.\n" -"The returned node will be added as child to a [PopupPanel], so you should " -"only provide the contents of that panel. That [PopupPanel] can be themed " -"using [method Theme.set_stylebox] for the type [code]\"TooltipPanel\"[/code] " -"(see [member tooltip_text] for an example).\n" -"[b]Note:[/b] The tooltip is shrunk to minimal size. If you want to ensure " -"it's fully visible, you might want to set its [member custom_minimum_size] to " -"some non-zero value.\n" -"[b]Note:[/b] The node (and any relevant children) should be [member " -"CanvasItem.visible] when returned, otherwise, the viewport that instantiates " -"it will not be able to calculate its minimum size reliably.\n" -"[b]Example of usage with a custom-constructed node:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _make_custom_tooltip(for_text):\n" -" var label = Label.new()\n" -" label.text = for_text\n" -" return label\n" -"[/gdscript]\n" -"[csharp]\n" -"public override Control _MakeCustomTooltip(string forText)\n" -"{\n" -" var label = new Label();\n" -" label.Text = forText;\n" -" return label;\n" -"}\n" -"[/csharp]\n" -"[/codeblocks]\n" -"[b]Example of usage with a custom scene instance:[/b]\n" -"[codeblocks]\n" -"[gdscript]\n" -"func _make_custom_tooltip(for_text):\n" -" var tooltip = preload(\"res://some_tooltip_scene.tscn\").instantiate()\n" -" tooltip.get_node(\"Label\").text = for_text\n" -" return tooltip\n" -"[/gdscript]\n" -"[csharp]\n" -"public override Control _MakeCustomTooltip(string forText)\n" -"{\n" -" Node tooltip = ResourceLoader.Load(\"res://" -"some_tooltip_scene.tscn\").Instantiate();\n" -" tooltip.GetNode